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

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: fix Mac 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 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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(&params); 315 chrome::Navigate(&params);
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698