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 "base/auto_reset.h" | 7 #include "base/auto_reset.h" |
| 8 #include "chrome/app/chrome_command_ids.h" | 8 #include "chrome/app/chrome_command_ids.h" |
| 9 #include "chrome/browser/browsing_data/browsing_data_helper.h" | 9 #include "chrome/browser/browsing_data/browsing_data_helper.h" |
| 10 #include "chrome/browser/password_manager/chrome_password_manager_client.h" | 10 #include "chrome/browser/password_manager/chrome_password_manager_client.h" |
| (...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 167 password_manager::ui::AUTO_SIGNIN_STATE && | 167 password_manager::ui::AUTO_SIGNIN_STATE && |
| 168 passwords_data_.state() != | 168 passwords_data_.state() != |
| 169 password_manager::ui::CREDENTIAL_REQUEST_STATE) { | 169 password_manager::ui::CREDENTIAL_REQUEST_STATE) { |
| 170 passwords_data_.OnPasswordAutofilled(password_form_map, origin); | 170 passwords_data_.OnPasswordAutofilled(password_form_map, origin); |
| 171 UpdateBubbleAndIconVisibility(); | 171 UpdateBubbleAndIconVisibility(); |
| 172 } | 172 } |
| 173 } | 173 } |
| 174 | 174 |
| 175 void ManagePasswordsUIController::OnLoginsChanged( | 175 void ManagePasswordsUIController::OnLoginsChanged( |
| 176 const password_manager::PasswordStoreChangeList& changes) { | 176 const password_manager::PasswordStoreChangeList& changes) { |
| 177 password_manager::ui::State current_state = state(); | 177 password_manager::ui::State current_state = GetState(); |
| 178 passwords_data_.ProcessLoginsChanged(changes); | 178 passwords_data_.ProcessLoginsChanged(changes); |
| 179 if (current_state != state()) | 179 if (current_state != GetState()) |
| 180 UpdateBubbleAndIconVisibility(); | 180 UpdateBubbleAndIconVisibility(); |
| 181 } | 181 } |
| 182 | 182 |
| 183 void ManagePasswordsUIController::NavigateToPasswordManagerSettingsPage() { | 183 const GURL& ManagePasswordsUIController::GetOrigin() const { |
| 184 #if defined(OS_ANDROID) | 184 return passwords_data_.origin(); |
| 185 chrome::android::ChromeApplication::ShowPasswordSettings(); | 185 } |
| 186 #else | 186 |
| 187 chrome::ShowSettingsSubPage( | 187 password_manager::ui::State ManagePasswordsUIController::GetState() const { |
| 188 chrome::FindBrowserWithWebContents(web_contents()), | 188 return passwords_data_.state(); |
| 189 chrome::kPasswordManagerSubPage); | 189 } |
| 190 #endif | 190 |
| 191 const autofill::PasswordForm& ManagePasswordsUIController:: | |
| 192 GetPendingPassword() const { | |
| 193 if (GetState() == password_manager::ui::AUTO_SIGNIN_STATE) | |
| 194 return *GetCurrentForms()[0]; | |
| 195 | |
| 196 DCHECK(GetState() == password_manager::ui::PENDING_PASSWORD_STATE || | |
| 197 GetState() == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE || | |
| 198 GetState() == password_manager::ui::CONFIRMATION_STATE) | |
| 199 << GetState(); | |
| 200 password_manager::PasswordFormManager* form_manager = | |
| 201 passwords_data_.form_manager(); | |
| 202 return form_manager->pending_credentials(); | |
| 203 } | |
| 204 | |
| 205 bool ManagePasswordsUIController::IsPasswordOverridden() const { | |
| 206 const password_manager::PasswordFormManager* form_manager = | |
| 207 passwords_data_.form_manager(); | |
| 208 return form_manager ? form_manager->password_overridden() : false; | |
| 209 } | |
| 210 | |
| 211 const std::vector<const autofill::PasswordForm*>& | |
| 212 ManagePasswordsUIController::GetCurrentForms() const { | |
| 213 return passwords_data_.GetCurrentForms(); | |
| 214 } | |
| 215 | |
| 216 const std::vector<const autofill::PasswordForm*>& | |
| 217 ManagePasswordsUIController::GetFederatedForms() const { | |
| 218 return passwords_data_.federated_credentials_forms(); | |
| 219 } | |
| 220 | |
| 221 void ManagePasswordsUIController::OnBubbleShown() { | |
| 222 should_pop_up_bubble_ = false; | |
| 223 } | |
| 224 | |
| 225 void ManagePasswordsUIController::OnBubbleHidden() { | |
| 226 // Avoid using |state()| which is overridden for some unit tests. | |
|
vabr (Chromium)
2015/11/18 08:59:45
There is no more state(), and the code below is us
vasilii
2015/11/18 12:27:45
Done.
| |
| 227 if (GetState() == password_manager::ui::CREDENTIAL_REQUEST_STATE || | |
| 228 GetState() == password_manager::ui::CONFIRMATION_STATE || | |
| 229 GetState() == password_manager::ui::AUTO_SIGNIN_STATE) { | |
| 230 passwords_data_.TransitionToState(password_manager::ui::MANAGE_STATE); | |
| 231 UpdateBubbleAndIconVisibility(); | |
| 232 } | |
| 233 } | |
| 234 | |
| 235 void ManagePasswordsUIController::OnNoInteractionOnUpdate() { | |
| 236 if (GetState() != password_manager::ui::PENDING_PASSWORD_UPDATE_STATE) { | |
| 237 // Do nothing if the state was changed. It can happen for example when the | |
| 238 // update bubble is active and a page navigation happens. | |
| 239 return; | |
| 240 } | |
| 241 password_manager::PasswordFormManager* form_manager = | |
| 242 passwords_data_.form_manager(); | |
| 243 DCHECK(form_manager); | |
| 244 form_manager->OnNoInteractionOnUpdate(); | |
| 245 } | |
| 246 | |
| 247 void ManagePasswordsUIController::OnNopeUpdateClicked() { | |
| 248 password_manager::PasswordFormManager* form_manager = | |
| 249 passwords_data_.form_manager(); | |
| 250 DCHECK(form_manager); | |
| 251 form_manager->OnNopeUpdateClicked(); | |
| 252 } | |
| 253 | |
| 254 void ManagePasswordsUIController::NeverSavePassword() { | |
| 255 DCHECK_EQ(password_manager::ui::PENDING_PASSWORD_STATE, GetState()); | |
| 256 NeverSavePasswordInternal(); | |
| 257 // The state stays the same. | |
| 258 } | |
| 259 | |
| 260 void ManagePasswordsUIController::SavePassword() { | |
| 261 DCHECK_EQ(password_manager::ui::PENDING_PASSWORD_STATE, GetState()); | |
| 262 SavePasswordInternal(); | |
| 263 passwords_data_.TransitionToState(password_manager::ui::MANAGE_STATE); | |
| 264 UpdateBubbleAndIconVisibility(); | |
| 265 } | |
| 266 | |
| 267 void ManagePasswordsUIController::UpdatePassword( | |
| 268 const autofill::PasswordForm& password_form) { | |
| 269 DCHECK_EQ(password_manager::ui::PENDING_PASSWORD_UPDATE_STATE, GetState()); | |
| 270 UpdatePasswordInternal(password_form); | |
| 271 passwords_data_.TransitionToState(password_manager::ui::MANAGE_STATE); | |
| 272 UpdateBubbleAndIconVisibility(); | |
| 273 } | |
| 274 | |
| 275 void ManagePasswordsUIController::ChooseCredential( | |
| 276 const autofill::PasswordForm& form, | |
| 277 password_manager::CredentialType credential_type) { | |
| 278 passwords_data_.ChooseCredential(form, credential_type); | |
| 191 } | 279 } |
| 192 | 280 |
| 193 void ManagePasswordsUIController::NavigateToExternalPasswordManager() { | 281 void ManagePasswordsUIController::NavigateToExternalPasswordManager() { |
| 194 #if defined(OS_ANDROID) | 282 #if defined(OS_ANDROID) |
| 195 NOTREACHED(); | 283 NOTREACHED(); |
| 196 #else | 284 #else |
| 197 chrome::NavigateParams params( | 285 chrome::NavigateParams params( |
| 198 chrome::FindBrowserWithWebContents(web_contents()), | 286 chrome::FindBrowserWithWebContents(web_contents()), |
| 199 GURL(chrome::kPasswordManagerAccountDashboardURL), | 287 GURL(chrome::kPasswordManagerAccountDashboardURL), |
| 200 ui::PAGE_TRANSITION_LINK); | 288 ui::PAGE_TRANSITION_LINK); |
| (...skipping 20 matching lines...) Expand all Loading... | |
| 221 NOTREACHED(); | 309 NOTREACHED(); |
| 222 #else | 310 #else |
| 223 chrome::NavigateParams params( | 311 chrome::NavigateParams params( |
| 224 chrome::FindBrowserWithWebContents(web_contents()), | 312 chrome::FindBrowserWithWebContents(web_contents()), |
| 225 GURL(chrome::kSmartLockHelpPage), ui::PAGE_TRANSITION_LINK); | 313 GURL(chrome::kSmartLockHelpPage), ui::PAGE_TRANSITION_LINK); |
| 226 params.disposition = NEW_FOREGROUND_TAB; | 314 params.disposition = NEW_FOREGROUND_TAB; |
| 227 chrome::Navigate(¶ms); | 315 chrome::Navigate(¶ms); |
| 228 #endif | 316 #endif |
| 229 } | 317 } |
| 230 | 318 |
| 231 void ManagePasswordsUIController::SavePassword() { | 319 void ManagePasswordsUIController::NavigateToPasswordManagerSettingsPage() { |
| 232 DCHECK_EQ(password_manager::ui::PENDING_PASSWORD_STATE, state()); | 320 #if defined(OS_ANDROID) |
| 233 SavePasswordInternal(); | 321 chrome::android::ChromeApplication::ShowPasswordSettings(); |
| 234 passwords_data_.TransitionToState(password_manager::ui::MANAGE_STATE); | 322 #else |
| 235 UpdateBubbleAndIconVisibility(); | 323 chrome::ShowSettingsSubPage( |
| 236 } | 324 chrome::FindBrowserWithWebContents(web_contents()), |
| 237 | 325 chrome::kPasswordManagerSubPage); |
| 238 void ManagePasswordsUIController::UpdatePassword( | 326 #endif |
| 239 const autofill::PasswordForm& password_form) { | |
| 240 DCHECK_EQ(password_manager::ui::PENDING_PASSWORD_UPDATE_STATE, state()); | |
| 241 UpdatePasswordInternal(password_form); | |
| 242 passwords_data_.TransitionToState(password_manager::ui::MANAGE_STATE); | |
| 243 UpdateBubbleAndIconVisibility(); | |
| 244 } | |
| 245 | |
| 246 void ManagePasswordsUIController::ChooseCredential( | |
| 247 const autofill::PasswordForm& form, | |
| 248 password_manager::CredentialType credential_type) { | |
| 249 passwords_data_.ChooseCredential(form, credential_type); | |
| 250 } | 327 } |
| 251 | 328 |
| 252 void ManagePasswordsUIController::SavePasswordInternal() { | 329 void ManagePasswordsUIController::SavePasswordInternal() { |
| 253 password_manager::PasswordStore* password_store = | 330 password_manager::PasswordStore* password_store = |
| 254 GetPasswordStore(web_contents()); | 331 GetPasswordStore(web_contents()); |
| 255 password_manager::PasswordFormManager* form_manager = | 332 password_manager::PasswordFormManager* form_manager = |
| 256 passwords_data_.form_manager(); | 333 passwords_data_.form_manager(); |
| 257 for (const autofill::PasswordForm* form : | 334 for (const autofill::PasswordForm* form : |
| 258 form_manager->blacklisted_matches()) { | 335 form_manager->blacklisted_matches()) { |
| 259 password_store->RemoveLogin(*form); | 336 password_store->RemoveLogin(*form); |
| 260 } | 337 } |
| 261 | 338 |
| 262 form_manager->Save(); | 339 form_manager->Save(); |
| 263 } | 340 } |
| 264 | 341 |
| 265 void ManagePasswordsUIController::UpdatePasswordInternal( | 342 void ManagePasswordsUIController::UpdatePasswordInternal( |
| 266 const autofill::PasswordForm& password_form) { | 343 const autofill::PasswordForm& password_form) { |
| 267 password_manager::PasswordFormManager* form_manager = | 344 password_manager::PasswordFormManager* form_manager = |
| 268 passwords_data_.form_manager(); | 345 passwords_data_.form_manager(); |
| 269 form_manager->Update(password_form); | 346 form_manager->Update(password_form); |
| 270 } | 347 } |
| 271 | 348 |
| 272 void ManagePasswordsUIController::NeverSavePassword() { | |
| 273 DCHECK_EQ(password_manager::ui::PENDING_PASSWORD_STATE, state()); | |
| 274 NeverSavePasswordInternal(); | |
| 275 // The state stays the same. | |
| 276 } | |
| 277 | |
| 278 void ManagePasswordsUIController::NeverSavePasswordInternal() { | 349 void ManagePasswordsUIController::NeverSavePasswordInternal() { |
| 279 password_manager::PasswordFormManager* form_manager = | 350 password_manager::PasswordFormManager* form_manager = |
| 280 passwords_data_.form_manager(); | 351 passwords_data_.form_manager(); |
| 281 DCHECK(form_manager); | 352 DCHECK(form_manager); |
| 282 form_manager->PermanentlyBlacklist(); | 353 form_manager->PermanentlyBlacklist(); |
| 283 } | 354 } |
| 284 | 355 |
| 285 void ManagePasswordsUIController::DidNavigateMainFrame( | 356 void ManagePasswordsUIController::DidNavigateMainFrame( |
| 286 const content::LoadCommittedDetails& details, | 357 const content::LoadCommittedDetails& details, |
| 287 const content::FrameNavigateParams& params) { | 358 const content::FrameNavigateParams& params) { |
| (...skipping 13 matching lines...) Expand all Loading... | |
| 301 // process of navigating to the landing page is longer than 1 second. | 372 // process of navigating to the landing page is longer than 1 second. |
| 302 timer_.reset(new base::ElapsedTimer()); | 373 timer_.reset(new base::ElapsedTimer()); |
| 303 } | 374 } |
| 304 | 375 |
| 305 void ManagePasswordsUIController::WasHidden() { | 376 void ManagePasswordsUIController::WasHidden() { |
| 306 #if !defined(OS_ANDROID) | 377 #if !defined(OS_ANDROID) |
| 307 TabDialogs::FromWebContents(web_contents())->HideManagePasswordsBubble(); | 378 TabDialogs::FromWebContents(web_contents())->HideManagePasswordsBubble(); |
| 308 #endif | 379 #endif |
| 309 } | 380 } |
| 310 | 381 |
| 311 const autofill::PasswordForm& ManagePasswordsUIController:: | |
| 312 PendingPassword() const { | |
| 313 if (state() == password_manager::ui::AUTO_SIGNIN_STATE) | |
| 314 return *GetCurrentForms()[0]; | |
| 315 | |
| 316 DCHECK(state() == password_manager::ui::PENDING_PASSWORD_STATE || | |
| 317 state() == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE || | |
| 318 state() == password_manager::ui::CONFIRMATION_STATE) | |
| 319 << state(); | |
| 320 password_manager::PasswordFormManager* form_manager = | |
| 321 passwords_data_.form_manager(); | |
| 322 return form_manager->pending_credentials(); | |
| 323 } | |
| 324 | |
| 325 bool ManagePasswordsUIController::PasswordOverridden() const { | |
| 326 const password_manager::PasswordFormManager* form_manager = | |
| 327 passwords_data_.form_manager(); | |
| 328 return form_manager ? form_manager->password_overridden() : false; | |
| 329 } | |
| 330 | |
| 331 #if !defined(OS_ANDROID) | 382 #if !defined(OS_ANDROID) |
| 332 void ManagePasswordsUIController::UpdateIconAndBubbleState( | 383 void ManagePasswordsUIController::UpdateIconAndBubbleState( |
| 333 ManagePasswordsIconView* icon) { | 384 ManagePasswordsIconView* icon) { |
| 334 if (should_pop_up_bubble_) { | 385 if (should_pop_up_bubble_) { |
| 335 // We must display the icon before showing the bubble, as the bubble would | 386 // We must display the icon before showing the bubble, as the bubble would |
| 336 // be otherwise unanchored. | 387 // be otherwise unanchored. |
| 337 icon->SetState(state()); | 388 icon->SetState(GetState()); |
| 338 ShowBubbleWithoutUserInteraction(); | 389 ShowBubbleWithoutUserInteraction(); |
| 339 } else { | 390 } else { |
| 340 icon->SetState(state()); | 391 icon->SetState(GetState()); |
| 341 } | 392 } |
| 342 } | 393 } |
| 343 #endif | 394 #endif |
| 344 | 395 |
| 345 void ManagePasswordsUIController::OnBubbleShown() { | |
| 346 should_pop_up_bubble_ = false; | |
| 347 } | |
| 348 | |
| 349 void ManagePasswordsUIController::OnNopeUpdateClicked() { | |
| 350 password_manager::PasswordFormManager* form_manager = | |
| 351 passwords_data_.form_manager(); | |
| 352 DCHECK(form_manager); | |
| 353 form_manager->OnNopeUpdateClicked(); | |
| 354 } | |
| 355 | |
| 356 void ManagePasswordsUIController::OnNoInteractionOnUpdate() { | |
| 357 if (state() != password_manager::ui::PENDING_PASSWORD_UPDATE_STATE) { | |
| 358 // Do nothing if the state was changed. It can happen for example when the | |
| 359 // update bubble is active and a page navigation happens. | |
| 360 return; | |
| 361 } | |
| 362 password_manager::PasswordFormManager* form_manager = | |
| 363 passwords_data_.form_manager(); | |
| 364 DCHECK(form_manager); | |
| 365 form_manager->OnNoInteractionOnUpdate(); | |
| 366 } | |
| 367 | |
| 368 void ManagePasswordsUIController::OnBubbleHidden() { | |
| 369 // Avoid using |state()| which is overridden for some unit tests. | |
| 370 if (state() == password_manager::ui::CREDENTIAL_REQUEST_STATE || | |
| 371 state() == password_manager::ui::CONFIRMATION_STATE || | |
| 372 state() == password_manager::ui::AUTO_SIGNIN_STATE) { | |
| 373 passwords_data_.TransitionToState(password_manager::ui::MANAGE_STATE); | |
| 374 UpdateBubbleAndIconVisibility(); | |
| 375 } | |
| 376 } | |
| 377 | |
| 378 password_manager::ui::State ManagePasswordsUIController::state() const { | |
| 379 return passwords_data_.state(); | |
| 380 } | |
| 381 | |
| 382 void ManagePasswordsUIController::ShowBubbleWithoutUserInteraction() { | 396 void ManagePasswordsUIController::ShowBubbleWithoutUserInteraction() { |
| 383 DCHECK(should_pop_up_bubble_); | 397 DCHECK(should_pop_up_bubble_); |
| 384 #if !defined(OS_ANDROID) | 398 #if !defined(OS_ANDROID) |
| 385 Browser* browser = chrome::FindBrowserWithWebContents(web_contents()); | 399 Browser* browser = chrome::FindBrowserWithWebContents(web_contents()); |
| 386 if (!browser || browser->toolbar_model()->input_in_progress()) | 400 if (!browser || browser->toolbar_model()->input_in_progress()) |
| 387 return; | 401 return; |
| 388 | 402 |
| 389 CommandUpdater* updater = browser->command_controller()->command_updater(); | 403 CommandUpdater* updater = browser->command_controller()->command_updater(); |
| 390 updater->ExecuteCommand(IDC_MANAGE_PASSWORDS_FOR_PAGE); | 404 updater->ExecuteCommand(IDC_MANAGE_PASSWORDS_FOR_PAGE); |
| 391 #endif | 405 #endif |
| 392 } | 406 } |
| 393 | 407 |
| 394 void ManagePasswordsUIController::WebContentsDestroyed() { | 408 void ManagePasswordsUIController::WebContentsDestroyed() { |
| 395 password_manager::PasswordStore* password_store = | 409 password_manager::PasswordStore* password_store = |
| 396 GetPasswordStore(web_contents()); | 410 GetPasswordStore(web_contents()); |
| 397 if (password_store) | 411 if (password_store) |
| 398 password_store->RemoveObserver(this); | 412 password_store->RemoveObserver(this); |
| 399 } | 413 } |
| 414 | |
| 415 PasswordsModelDelegate* PasswordsModelDelegateFromWebContents( | |
|
vabr (Chromium)
2015/11/18 08:59:45
I am not happy about the definition of this functi
vasilii
2015/11/18 12:27:45
Done.
vabr (Chromium)
2015/11/18 12:36:40
Just to acknowledge that I was incorrect here, and
| |
| 416 content::WebContents* web_contents) { | |
| 417 DCHECK(web_contents); | |
| 418 return ManagePasswordsUIController::FromWebContents(web_contents); | |
| 419 } | |
| OLD | NEW |