OLD | NEW |
---|---|
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/views/passwords/manage_passwords_bubble_view.h" | 5 #include "chrome/browser/ui/views/passwords/manage_passwords_bubble_view.h" |
6 | 6 |
7 #include "base/timer/timer.h" | 7 #include "base/timer/timer.h" |
8 #include "chrome/browser/profiles/profile.h" | 8 #include "chrome/browser/profiles/profile.h" |
9 #include "chrome/browser/ui/browser.h" | 9 #include "chrome/browser/ui/browser.h" |
10 #include "chrome/browser/ui/browser_finder.h" | 10 #include "chrome/browser/ui/browser_finder.h" |
(...skipping 357 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
368 void StyledLabelLinkClicked(const gfx::Range& range, | 368 void StyledLabelLinkClicked(const gfx::Range& range, |
369 int event_flags) override; | 369 int event_flags) override; |
370 | 370 |
371 // Handles the event when the user changes an index of a combobox. | 371 // Handles the event when the user changes an index of a combobox. |
372 void OnPerformAction(views::Combobox* source) override; | 372 void OnPerformAction(views::Combobox* source) override; |
373 | 373 |
374 ManagePasswordsBubbleView* parent_; | 374 ManagePasswordsBubbleView* parent_; |
375 | 375 |
376 views::BlueButton* save_button_; | 376 views::BlueButton* save_button_; |
377 | 377 |
378 views::LabelButton* nope_button_; | |
379 | |
378 // The combobox doesn't take ownership of its model. If we created a | 380 // The combobox doesn't take ownership of its model. If we created a |
379 // combobox we need to ensure that we delete the model here, and because the | 381 // combobox we need to ensure that we delete the model here, and because the |
380 // combobox uses the model in it's destructor, we need to make sure we | 382 // combobox uses the model in it's destructor, we need to make sure we |
381 // delete the model _after_ the combobox itself is deleted. | 383 // delete the model _after_ the combobox itself is deleted. |
382 scoped_ptr<SavePasswordRefusalComboboxModel> combobox_model_; | 384 scoped_ptr<SavePasswordRefusalComboboxModel> combobox_model_; |
383 scoped_ptr<views::Combobox> refuse_combobox_; | 385 scoped_ptr<views::Combobox> refuse_combobox_; |
384 | 386 |
385 DISALLOW_COPY_AND_ASSIGN(PendingView); | 387 DISALLOW_COPY_AND_ASSIGN(PendingView); |
386 }; | 388 }; |
387 | 389 |
388 ManagePasswordsBubbleView::PendingView::PendingView( | 390 ManagePasswordsBubbleView::PendingView::PendingView( |
389 ManagePasswordsBubbleView* parent) | 391 ManagePasswordsBubbleView* parent) |
390 : parent_(parent) { | 392 : parent_(parent), save_button_(nullptr), nope_button_(nullptr) { |
391 views::GridLayout* layout = new views::GridLayout(this); | 393 views::GridLayout* layout = new views::GridLayout(this); |
392 layout->set_minimum_size(gfx::Size(kDesiredBubbleWidth, 0)); | 394 layout->set_minimum_size(gfx::Size(kDesiredBubbleWidth, 0)); |
393 SetLayoutManager(layout); | 395 SetLayoutManager(layout); |
394 | 396 |
395 std::vector<const autofill::PasswordForm*> credentials( | 397 std::vector<const autofill::PasswordForm*> credentials; |
396 1, &parent->model()->pending_password()); | 398 if (parent->model()->account_for_update_selection()) { |
vabr (Chromium)
2015/06/19 18:03:16
Should you actually create a separate view rather
dvadym
2015/06/22 14:43:33
Yeah, this is a good question that constantly appe
| |
399 for (auto local_credential : parent->model()->local_credentials()) | |
400 credentials.push_back(local_credential); | |
401 } else { | |
402 credentials.push_back(&parent->model()->pending_password()); | |
403 } | |
397 // Create the pending credential item, save button and refusal combobox. | 404 // Create the pending credential item, save button and refusal combobox. |
398 ManagePasswordItemsView* item = | 405 ManagePasswordItemsView* item = |
399 new ManagePasswordItemsView(parent_->model(), credentials); | 406 new ManagePasswordItemsView(parent_->model(), credentials); |
400 save_button_ = new views::BlueButton( | 407 if (parent->model()->is_password_change_form_without_username()) { |
401 this, l10n_util::GetStringUTF16(IDS_PASSWORD_MANAGER_SAVE_BUTTON)); | 408 nope_button_ = new views::LabelButton( |
402 save_button_->SetFontList(ui::ResourceBundle::GetSharedInstance().GetFontList( | 409 this, l10n_util::GetStringUTF16(IDS_PASSWORD_MANAGER_CANCEL_BUTTON)); |
403 ui::ResourceBundle::SmallFont)); | 410 nope_button_->SetStyle(views::Button::STYLE_BUTTON); |
404 | 411 nope_button_->SetFontList( |
405 combobox_model_.reset(new SavePasswordRefusalComboboxModel); | 412 ui::ResourceBundle::GetSharedInstance().GetFontList( |
406 refuse_combobox_.reset(new views::Combobox(combobox_model_.get())); | 413 ui::ResourceBundle::SmallFont)); |
407 refuse_combobox_->set_listener(this); | 414 } else { |
408 refuse_combobox_->SetStyle(views::Combobox::STYLE_ACTION); | 415 combobox_model_.reset(new SavePasswordRefusalComboboxModel); |
409 // TODO(mkwst): Need a mechanism to pipe a font list down into a combobox. | 416 refuse_combobox_.reset(new views::Combobox(combobox_model_.get())); |
417 refuse_combobox_->set_listener(this); | |
418 refuse_combobox_->SetStyle(views::Combobox::STYLE_ACTION); | |
419 // TODO(mkwst): Need a mechanism to pipe a font list down into a combobox. | |
420 } | |
421 if (!parent->model()->account_for_update_selection()) { | |
422 save_button_ = | |
423 new views::BlueButton(this, parent_->model()->save_button_text()); | |
424 save_button_->SetFontList( | |
425 ui::ResourceBundle::GetSharedInstance().GetFontList( | |
426 ui::ResourceBundle::SmallFont)); | |
427 } | |
410 | 428 |
411 // Title row. | 429 // Title row. |
412 views::StyledLabel* title_label = | 430 views::StyledLabel* title_label = |
413 new views::StyledLabel(parent_->model()->title(), this); | 431 new views::StyledLabel(parent_->model()->title(), this); |
414 title_label->SetBaseFontList( | 432 title_label->SetBaseFontList( |
415 ui::ResourceBundle::GetSharedInstance().GetFontList( | 433 ui::ResourceBundle::GetSharedInstance().GetFontList( |
416 ui::ResourceBundle::MediumFont)); | 434 ui::ResourceBundle::MediumFont)); |
417 if (!parent_->model()->title_brand_link_range().is_empty()) { | 435 if (!parent_->model()->title_brand_link_range().is_empty()) { |
418 title_label->AddStyleRange( | 436 title_label->AddStyleRange( |
419 parent_->model()->title_brand_link_range(), | 437 parent_->model()->title_brand_link_range(), |
420 views::StyledLabel::RangeStyleInfo::CreateForLink()); | 438 views::StyledLabel::RangeStyleInfo::CreateForLink()); |
421 } | 439 } |
422 BuildColumnSet(layout, SINGLE_VIEW_COLUMN_SET); | 440 BuildColumnSet(layout, SINGLE_VIEW_COLUMN_SET); |
423 layout->StartRow(0, SINGLE_VIEW_COLUMN_SET); | 441 layout->StartRow(0, SINGLE_VIEW_COLUMN_SET); |
424 layout->AddView(title_label); | 442 layout->AddView(title_label); |
425 layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing); | 443 layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing); |
426 | 444 |
427 // Credential row. | 445 // Credential row. |
428 layout->StartRow(0, SINGLE_VIEW_COLUMN_SET); | 446 layout->StartRow(0, SINGLE_VIEW_COLUMN_SET); |
429 layout->AddView(item); | 447 layout->AddView(item); |
430 | 448 |
431 // Button row. | 449 // Button row. |
432 BuildColumnSet(layout, DOUBLE_BUTTON_COLUMN_SET); | 450 ColumnSetType button_column_type = |
433 layout->StartRowWithPadding( | 451 parent->model()->account_for_update_selection() |
434 0, DOUBLE_BUTTON_COLUMN_SET, 0, views::kRelatedControlVerticalSpacing); | 452 ? SINGLE_BUTTON_COLUMN_SET |
435 layout->AddView(save_button_); | 453 : DOUBLE_BUTTON_COLUMN_SET; |
436 layout->AddView(refuse_combobox_.get()); | 454 BuildColumnSet(layout, button_column_type); |
455 layout->StartRowWithPadding(0, button_column_type, 0, | |
456 views::kRelatedControlVerticalSpacing); | |
457 if (parent->model()->account_for_update_selection()) { | |
458 layout->AddView(nope_button_); | |
459 } else { | |
460 layout->AddView(save_button_); | |
461 if (parent->model()->is_password_change_form_without_username()) | |
462 layout->AddView(nope_button_); | |
463 else | |
464 layout->AddView(refuse_combobox_.get()); | |
465 } | |
437 | 466 |
438 // Extra padding for visual awesomeness. | 467 // Extra padding for visual awesomeness. |
439 layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing); | 468 layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing); |
440 | 469 |
441 parent_->set_initially_focused_view(save_button_); | 470 parent_->set_initially_focused_view(save_button_); |
442 } | 471 } |
443 | 472 |
444 ManagePasswordsBubbleView::PendingView::~PendingView() { | 473 ManagePasswordsBubbleView::PendingView::~PendingView() { |
445 } | 474 } |
446 | 475 |
447 void ManagePasswordsBubbleView::PendingView::ButtonPressed( | 476 void ManagePasswordsBubbleView::PendingView::ButtonPressed( |
448 views::Button* sender, | 477 views::Button* sender, |
449 const ui::Event& event) { | 478 const ui::Event& event) { |
450 DCHECK(sender == save_button_); | 479 DCHECK(sender == save_button_ || sender == nope_button_); |
451 parent_->model()->OnSaveClicked(); | 480 if (sender == save_button_) |
481 parent_->model()->OnSaveClicked(); | |
452 parent_->Close(); | 482 parent_->Close(); |
453 } | 483 } |
454 | 484 |
455 void ManagePasswordsBubbleView::PendingView::StyledLabelLinkClicked( | 485 void ManagePasswordsBubbleView::PendingView::StyledLabelLinkClicked( |
456 const gfx::Range& range, | 486 const gfx::Range& range, |
457 int event_flags) { | 487 int event_flags) { |
458 DCHECK_EQ(range, parent_->model()->title_brand_link_range()); | 488 DCHECK_EQ(range, parent_->model()->title_brand_link_range()); |
459 parent_->model()->OnBrandLinkClicked(); | 489 parent_->model()->OnBrandLinkClicked(); |
460 } | 490 } |
461 | 491 |
(...skipping 755 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1217 void ManagePasswordsBubbleView::NotifyNeverForThisSiteClicked() { | 1247 void ManagePasswordsBubbleView::NotifyNeverForThisSiteClicked() { |
1218 if (model()->local_credentials().empty()) { | 1248 if (model()->local_credentials().empty()) { |
1219 // Skip confirmation if there are no existing passwords for this site. | 1249 // Skip confirmation if there are no existing passwords for this site. |
1220 NotifyConfirmedNeverForThisSite(); | 1250 NotifyConfirmedNeverForThisSite(); |
1221 } else { | 1251 } else { |
1222 model()->OnConfirmationForNeverForThisSite(); | 1252 model()->OnConfirmationForNeverForThisSite(); |
1223 Refresh(); | 1253 Refresh(); |
1224 SizeToContents(); | 1254 SizeToContents(); |
1225 } | 1255 } |
1226 } | 1256 } |
OLD | NEW |