Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(53)

Side by Side Diff: chrome/browser/ui/passwords/manage_passwords_ui_controller.cc

Issue 1445383003: Introduce PasswordsModelDelegate as an abstraction between ManagePasswordsBubbleModel and ManagePas… (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
177 password_manager::ui::AUTO_SIGNIN_STATE && 177 password_manager::ui::AUTO_SIGNIN_STATE &&
178 passwords_data_.state() != 178 passwords_data_.state() !=
179 password_manager::ui::CREDENTIAL_REQUEST_STATE) { 179 password_manager::ui::CREDENTIAL_REQUEST_STATE) {
180 passwords_data_.OnPasswordAutofilled(password_form_map, origin); 180 passwords_data_.OnPasswordAutofilled(password_form_map, origin);
181 UpdateBubbleAndIconVisibility(); 181 UpdateBubbleAndIconVisibility();
182 } 182 }
183 } 183 }
184 184
185 void ManagePasswordsUIController::OnLoginsChanged( 185 void ManagePasswordsUIController::OnLoginsChanged(
186 const password_manager::PasswordStoreChangeList& changes) { 186 const password_manager::PasswordStoreChangeList& changes) {
187 password_manager::ui::State current_state = state(); 187 password_manager::ui::State current_state = GetState();
188 passwords_data_.ProcessLoginsChanged(changes); 188 passwords_data_.ProcessLoginsChanged(changes);
189 if (current_state != state()) 189 if (current_state != GetState())
190 UpdateBubbleAndIconVisibility(); 190 UpdateBubbleAndIconVisibility();
191 } 191 }
192 192
193 void ManagePasswordsUIController::NavigateToPasswordManagerSettingsPage() { 193 const GURL& ManagePasswordsUIController::GetOrigin() const {
194 #if defined(OS_ANDROID) 194 return passwords_data_.origin();
195 chrome::android::ChromeApplication::ShowPasswordSettings(); 195 }
196 #else 196
197 chrome::ShowSettingsSubPage( 197 password_manager::ui::State ManagePasswordsUIController::GetState() const {
198 chrome::FindBrowserWithWebContents(web_contents()), 198 return passwords_data_.state();
199 chrome::kPasswordManagerSubPage); 199 }
200 #endif 200
201 const autofill::PasswordForm& ManagePasswordsUIController::
202 GetPendingPassword() const {
203 if (GetState() == password_manager::ui::AUTO_SIGNIN_STATE)
204 return *GetCurrentForms()[0];
205
206 DCHECK(GetState() == password_manager::ui::PENDING_PASSWORD_STATE ||
207 GetState() == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE ||
208 GetState() == password_manager::ui::CONFIRMATION_STATE)
209 << GetState();
210 password_manager::PasswordFormManager* form_manager =
211 passwords_data_.form_manager();
212 return form_manager->pending_credentials();
213 }
214
215 bool ManagePasswordsUIController::IsPasswordOverridden() const {
216 const password_manager::PasswordFormManager* form_manager =
217 passwords_data_.form_manager();
218 return form_manager ? form_manager->password_overridden() : false;
219 }
220
221 const std::vector<const autofill::PasswordForm*>&
222 ManagePasswordsUIController::GetCurrentForms() const {
223 return passwords_data_.GetCurrentForms();
224 }
225
226 const std::vector<const autofill::PasswordForm*>&
227 ManagePasswordsUIController::GetFederatedForms() const {
228 return passwords_data_.federated_credentials_forms();
229 }
230
231 password_manager::InteractionsStats*
232 ManagePasswordsUIController::GetCurrentInteractionStats() const {
233 DCHECK_EQ(password_manager::ui::PENDING_PASSWORD_STATE, GetState());
234 password_manager::PasswordFormManager* form_manager =
235 passwords_data_.form_manager();
236 return password_manager::FindStatsByUsername(
237 form_manager->interactions_stats(),
238 form_manager->pending_credentials().username_value);
239 }
240
241 void ManagePasswordsUIController::OnBubbleShown() {
242 should_pop_up_bubble_ = false;
243 }
244
245 void ManagePasswordsUIController::OnBubbleHidden() {
246 if (GetState() == password_manager::ui::CREDENTIAL_REQUEST_STATE ||
247 GetState() == password_manager::ui::CONFIRMATION_STATE ||
248 GetState() == password_manager::ui::AUTO_SIGNIN_STATE) {
249 passwords_data_.TransitionToState(password_manager::ui::MANAGE_STATE);
250 UpdateBubbleAndIconVisibility();
251 }
252 }
253
254 void ManagePasswordsUIController::OnNoInteractionOnUpdate() {
255 if (GetState() != password_manager::ui::PENDING_PASSWORD_UPDATE_STATE) {
256 // Do nothing if the state was changed. It can happen for example when the
257 // update bubble is active and a page navigation happens.
258 return;
259 }
260 password_manager::PasswordFormManager* form_manager =
261 passwords_data_.form_manager();
262 DCHECK(form_manager);
263 form_manager->OnNoInteractionOnUpdate();
264 }
265
266 void ManagePasswordsUIController::OnNopeUpdateClicked() {
267 password_manager::PasswordFormManager* form_manager =
268 passwords_data_.form_manager();
269 DCHECK(form_manager);
270 form_manager->OnNopeUpdateClicked();
271 }
272
273 void ManagePasswordsUIController::NeverSavePassword() {
274 DCHECK_EQ(password_manager::ui::PENDING_PASSWORD_STATE, GetState());
275 NeverSavePasswordInternal();
276 // The state stays the same.
277 }
278
279 void ManagePasswordsUIController::SavePassword() {
280 DCHECK_EQ(password_manager::ui::PENDING_PASSWORD_STATE, GetState());
281 SavePasswordInternal();
282 passwords_data_.TransitionToState(password_manager::ui::MANAGE_STATE);
283 UpdateBubbleAndIconVisibility();
284 }
285
286 void ManagePasswordsUIController::UpdatePassword(
287 const autofill::PasswordForm& password_form) {
288 DCHECK_EQ(password_manager::ui::PENDING_PASSWORD_UPDATE_STATE, GetState());
289 UpdatePasswordInternal(password_form);
290 passwords_data_.TransitionToState(password_manager::ui::MANAGE_STATE);
291 UpdateBubbleAndIconVisibility();
292 }
293
294 void ManagePasswordsUIController::ChooseCredential(
295 const autofill::PasswordForm& form,
296 password_manager::CredentialType credential_type) {
297 passwords_data_.ChooseCredential(form, credential_type);
201 } 298 }
202 299
203 void ManagePasswordsUIController::NavigateToExternalPasswordManager() { 300 void ManagePasswordsUIController::NavigateToExternalPasswordManager() {
204 #if defined(OS_ANDROID) 301 #if defined(OS_ANDROID)
205 NOTREACHED(); 302 NOTREACHED();
206 #else 303 #else
207 chrome::NavigateParams params( 304 chrome::NavigateParams params(
208 chrome::FindBrowserWithWebContents(web_contents()), 305 chrome::FindBrowserWithWebContents(web_contents()),
209 GURL(chrome::kPasswordManagerAccountDashboardURL), 306 GURL(chrome::kPasswordManagerAccountDashboardURL),
210 ui::PAGE_TRANSITION_LINK); 307 ui::PAGE_TRANSITION_LINK);
(...skipping 20 matching lines...) Expand all
231 NOTREACHED(); 328 NOTREACHED();
232 #else 329 #else
233 chrome::NavigateParams params( 330 chrome::NavigateParams params(
234 chrome::FindBrowserWithWebContents(web_contents()), 331 chrome::FindBrowserWithWebContents(web_contents()),
235 GURL(chrome::kSmartLockHelpPage), ui::PAGE_TRANSITION_LINK); 332 GURL(chrome::kSmartLockHelpPage), ui::PAGE_TRANSITION_LINK);
236 params.disposition = NEW_FOREGROUND_TAB; 333 params.disposition = NEW_FOREGROUND_TAB;
237 chrome::Navigate(&params); 334 chrome::Navigate(&params);
238 #endif 335 #endif
239 } 336 }
240 337
241 void ManagePasswordsUIController::SavePassword() { 338 void ManagePasswordsUIController::NavigateToPasswordManagerSettingsPage() {
242 DCHECK_EQ(password_manager::ui::PENDING_PASSWORD_STATE, state()); 339 #if defined(OS_ANDROID)
243 SavePasswordInternal(); 340 chrome::android::ChromeApplication::ShowPasswordSettings();
244 passwords_data_.TransitionToState(password_manager::ui::MANAGE_STATE); 341 #else
245 UpdateBubbleAndIconVisibility(); 342 chrome::ShowSettingsSubPage(
246 } 343 chrome::FindBrowserWithWebContents(web_contents()),
247 344 chrome::kPasswordManagerSubPage);
248 void ManagePasswordsUIController::UpdatePassword( 345 #endif
249 const autofill::PasswordForm& password_form) {
250 DCHECK_EQ(password_manager::ui::PENDING_PASSWORD_UPDATE_STATE, state());
251 UpdatePasswordInternal(password_form);
252 passwords_data_.TransitionToState(password_manager::ui::MANAGE_STATE);
253 UpdateBubbleAndIconVisibility();
254 }
255
256 void ManagePasswordsUIController::ChooseCredential(
257 const autofill::PasswordForm& form,
258 password_manager::CredentialType credential_type) {
259 passwords_data_.ChooseCredential(form, credential_type);
260 } 346 }
261 347
262 void ManagePasswordsUIController::SavePasswordInternal() { 348 void ManagePasswordsUIController::SavePasswordInternal() {
263 password_manager::PasswordStore* password_store = 349 password_manager::PasswordStore* password_store =
264 GetPasswordStore(web_contents()); 350 GetPasswordStore(web_contents());
265 password_manager::PasswordFormManager* form_manager = 351 password_manager::PasswordFormManager* form_manager =
266 passwords_data_.form_manager(); 352 passwords_data_.form_manager();
267 for (const autofill::PasswordForm* form : 353 for (const autofill::PasswordForm* form :
268 form_manager->blacklisted_matches()) { 354 form_manager->blacklisted_matches()) {
269 password_store->RemoveLogin(*form); 355 password_store->RemoveLogin(*form);
270 } 356 }
271 357
272 form_manager->Save(); 358 form_manager->Save();
273 } 359 }
274 360
275 void ManagePasswordsUIController::UpdatePasswordInternal( 361 void ManagePasswordsUIController::UpdatePasswordInternal(
276 const autofill::PasswordForm& password_form) { 362 const autofill::PasswordForm& password_form) {
277 password_manager::PasswordFormManager* form_manager = 363 password_manager::PasswordFormManager* form_manager =
278 passwords_data_.form_manager(); 364 passwords_data_.form_manager();
279 form_manager->Update(password_form); 365 form_manager->Update(password_form);
280 } 366 }
281 367
282 void ManagePasswordsUIController::NeverSavePassword() {
283 DCHECK_EQ(password_manager::ui::PENDING_PASSWORD_STATE, state());
284 NeverSavePasswordInternal();
285 // The state stays the same.
286 }
287
288 void ManagePasswordsUIController::NeverSavePasswordInternal() { 368 void ManagePasswordsUIController::NeverSavePasswordInternal() {
289 password_manager::PasswordFormManager* form_manager = 369 password_manager::PasswordFormManager* form_manager =
290 passwords_data_.form_manager(); 370 passwords_data_.form_manager();
291 DCHECK(form_manager); 371 DCHECK(form_manager);
292 form_manager->PermanentlyBlacklist(); 372 form_manager->PermanentlyBlacklist();
293 } 373 }
294 374
295 void ManagePasswordsUIController::DidNavigateMainFrame( 375 void ManagePasswordsUIController::DidNavigateMainFrame(
296 const content::LoadCommittedDetails& details, 376 const content::LoadCommittedDetails& details,
297 const content::FrameNavigateParams& params) { 377 const content::FrameNavigateParams& params) {
(...skipping 13 matching lines...) Expand all
311 // process of navigating to the landing page is longer than 1 second. 391 // process of navigating to the landing page is longer than 1 second.
312 timer_.reset(new base::ElapsedTimer()); 392 timer_.reset(new base::ElapsedTimer());
313 } 393 }
314 394
315 void ManagePasswordsUIController::WasHidden() { 395 void ManagePasswordsUIController::WasHidden() {
316 #if !defined(OS_ANDROID) 396 #if !defined(OS_ANDROID)
317 TabDialogs::FromWebContents(web_contents())->HideManagePasswordsBubble(); 397 TabDialogs::FromWebContents(web_contents())->HideManagePasswordsBubble();
318 #endif 398 #endif
319 } 399 }
320 400
321 const autofill::PasswordForm& ManagePasswordsUIController::
322 PendingPassword() const {
323 if (state() == password_manager::ui::AUTO_SIGNIN_STATE)
324 return *GetCurrentForms()[0];
325
326 DCHECK(state() == password_manager::ui::PENDING_PASSWORD_STATE ||
327 state() == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE ||
328 state() == password_manager::ui::CONFIRMATION_STATE)
329 << state();
330 password_manager::PasswordFormManager* form_manager =
331 passwords_data_.form_manager();
332 return form_manager->pending_credentials();
333 }
334
335 bool ManagePasswordsUIController::PasswordOverridden() const {
336 const password_manager::PasswordFormManager* form_manager =
337 passwords_data_.form_manager();
338 return form_manager ? form_manager->password_overridden() : false;
339 }
340
341 password_manager::InteractionsStats*
342 ManagePasswordsUIController::GetCurrentInteractionStats() const {
343 DCHECK_EQ(password_manager::ui::PENDING_PASSWORD_STATE, state());
344 password_manager::PasswordFormManager* form_manager =
345 passwords_data_.form_manager();
346 return password_manager::FindStatsByUsername(
347 form_manager->interactions_stats(),
348 form_manager->pending_credentials().username_value);
349 }
350
351 #if !defined(OS_ANDROID) 401 #if !defined(OS_ANDROID)
352 void ManagePasswordsUIController::UpdateIconAndBubbleState( 402 void ManagePasswordsUIController::UpdateIconAndBubbleState(
353 ManagePasswordsIconView* icon) { 403 ManagePasswordsIconView* icon) {
354 if (should_pop_up_bubble_) { 404 if (should_pop_up_bubble_) {
355 // We must display the icon before showing the bubble, as the bubble would 405 // We must display the icon before showing the bubble, as the bubble would
356 // be otherwise unanchored. 406 // be otherwise unanchored.
357 icon->SetState(state()); 407 icon->SetState(GetState());
358 ShowBubbleWithoutUserInteraction(); 408 ShowBubbleWithoutUserInteraction();
359 } else { 409 } else {
360 icon->SetState(state()); 410 icon->SetState(GetState());
361 } 411 }
362 } 412 }
363 #endif 413 #endif
364 414
365 void ManagePasswordsUIController::OnBubbleShown() {
366 should_pop_up_bubble_ = false;
367 }
368
369 void ManagePasswordsUIController::OnNopeUpdateClicked() {
370 password_manager::PasswordFormManager* form_manager =
371 passwords_data_.form_manager();
372 DCHECK(form_manager);
373 form_manager->OnNopeUpdateClicked();
374 }
375
376 void ManagePasswordsUIController::OnNoInteractionOnUpdate() {
377 if (state() != password_manager::ui::PENDING_PASSWORD_UPDATE_STATE) {
378 // Do nothing if the state was changed. It can happen for example when the
379 // update bubble is active and a page navigation happens.
380 return;
381 }
382 password_manager::PasswordFormManager* form_manager =
383 passwords_data_.form_manager();
384 DCHECK(form_manager);
385 form_manager->OnNoInteractionOnUpdate();
386 }
387
388 void ManagePasswordsUIController::OnBubbleHidden() {
389 // Avoid using |state()| which is overridden for some unit tests.
390 if (state() == password_manager::ui::CREDENTIAL_REQUEST_STATE ||
391 state() == password_manager::ui::CONFIRMATION_STATE ||
392 state() == password_manager::ui::AUTO_SIGNIN_STATE) {
393 passwords_data_.TransitionToState(password_manager::ui::MANAGE_STATE);
394 UpdateBubbleAndIconVisibility();
395 }
396 }
397
398 password_manager::ui::State ManagePasswordsUIController::state() const {
399 return passwords_data_.state();
400 }
401
402 void ManagePasswordsUIController::ShowBubbleWithoutUserInteraction() { 415 void ManagePasswordsUIController::ShowBubbleWithoutUserInteraction() {
403 DCHECK(should_pop_up_bubble_); 416 DCHECK(should_pop_up_bubble_);
404 #if !defined(OS_ANDROID) 417 #if !defined(OS_ANDROID)
405 Browser* browser = chrome::FindBrowserWithWebContents(web_contents()); 418 Browser* browser = chrome::FindBrowserWithWebContents(web_contents());
406 if (!browser || browser->toolbar_model()->input_in_progress()) 419 if (!browser || browser->toolbar_model()->input_in_progress())
407 return; 420 return;
408 421
409 CommandUpdater* updater = browser->command_controller()->command_updater(); 422 CommandUpdater* updater = browser->command_controller()->command_updater();
410 updater->ExecuteCommand(IDC_MANAGE_PASSWORDS_FOR_PAGE); 423 updater->ExecuteCommand(IDC_MANAGE_PASSWORDS_FOR_PAGE);
411 #endif 424 #endif
412 } 425 }
413 426
414 void ManagePasswordsUIController::WebContentsDestroyed() { 427 void ManagePasswordsUIController::WebContentsDestroyed() {
415 password_manager::PasswordStore* password_store = 428 password_manager::PasswordStore* password_store =
416 GetPasswordStore(web_contents()); 429 GetPasswordStore(web_contents());
417 if (password_store) 430 if (password_store)
418 password_store->RemoveObserver(this); 431 password_store->RemoveObserver(this);
419 } 432 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698