Chromium Code Reviews| 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 358 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 369 void StyledLabelLinkClicked(const gfx::Range& range, | 369 void StyledLabelLinkClicked(const gfx::Range& range, |
| 370 int event_flags) override; | 370 int event_flags) override; |
| 371 | 371 |
| 372 // Handles the event when the user changes an index of a combobox. | 372 // Handles the event when the user changes an index of a combobox. |
| 373 void OnPerformAction(views::Combobox* source) override; | 373 void OnPerformAction(views::Combobox* source) override; |
| 374 | 374 |
| 375 ManagePasswordsBubbleView* parent_; | 375 ManagePasswordsBubbleView* parent_; |
| 376 | 376 |
| 377 views::BlueButton* save_button_; | 377 views::BlueButton* save_button_; |
| 378 | 378 |
| 379 views::LabelButton* nope_button_; | |
|
vasilii
2015/06/03 18:32:02
I suggest that you go with a new UpdateView implem
dvadym
2015/07/23 09:45:43
It's implemented UpdatePendingView class that hand
| |
| 380 | |
| 379 // The combobox doesn't take ownership of its model. If we created a | 381 // The combobox doesn't take ownership of its model. If we created a |
| 380 // combobox we need to ensure that we delete the model here, and because the | 382 // combobox we need to ensure that we delete the model here, and because the |
| 381 // combobox uses the model in it's destructor, we need to make sure we | 383 // combobox uses the model in it's destructor, we need to make sure we |
| 382 // delete the model _after_ the combobox itself is deleted. | 384 // delete the model _after_ the combobox itself is deleted. |
| 383 scoped_ptr<SavePasswordRefusalComboboxModel> combobox_model_; | 385 scoped_ptr<SavePasswordRefusalComboboxModel> combobox_model_; |
| 384 scoped_ptr<views::Combobox> refuse_combobox_; | 386 scoped_ptr<views::Combobox> refuse_combobox_; |
| 385 | 387 |
| 386 DISALLOW_COPY_AND_ASSIGN(PendingView); | 388 DISALLOW_COPY_AND_ASSIGN(PendingView); |
| 387 }; | 389 }; |
| 388 | 390 |
| 389 ManagePasswordsBubbleView::PendingView::PendingView( | 391 ManagePasswordsBubbleView::PendingView::PendingView( |
| 390 ManagePasswordsBubbleView* parent) | 392 ManagePasswordsBubbleView* parent) |
| 391 : parent_(parent) { | 393 : parent_(parent), save_button_(nullptr), nope_button_(nullptr) { |
| 392 views::GridLayout* layout = new views::GridLayout(this); | 394 views::GridLayout* layout = new views::GridLayout(this); |
| 393 layout->set_minimum_size(gfx::Size(kDesiredBubbleWidth, 0)); | 395 layout->set_minimum_size(gfx::Size(kDesiredBubbleWidth, 0)); |
| 394 SetLayoutManager(layout); | 396 SetLayoutManager(layout); |
| 395 | 397 |
| 396 std::vector<const autofill::PasswordForm*> credentials( | 398 std::vector<const autofill::PasswordForm*> credentials; |
| 397 1, &parent->model()->pending_password()); | 399 if (parent->model()->account_for_update_selection()) { |
| 400 for (auto local_credential : parent->model()->local_credentials()) | |
| 401 credentials.push_back(local_credential); | |
| 402 } else { | |
| 403 credentials.push_back(&parent->model()->pending_password()); | |
| 404 } | |
| 398 // Create the pending credential item, save button and refusal combobox. | 405 // Create the pending credential item, save button and refusal combobox. |
| 399 ManagePasswordItemsView* item = | 406 ManagePasswordItemsView* item = |
| 400 new ManagePasswordItemsView(parent_->model(), credentials); | 407 new ManagePasswordItemsView(parent_->model(), credentials); |
| 401 save_button_ = new views::BlueButton( | 408 if (parent->model()->is_password_change_form_without_username()) { |
| 402 this, l10n_util::GetStringUTF16(IDS_PASSWORD_MANAGER_SAVE_BUTTON)); | 409 nope_button_ = new views::LabelButton( |
| 403 save_button_->SetFontList(ui::ResourceBundle::GetSharedInstance().GetFontList( | 410 this, l10n_util::GetStringUTF16(IDS_PASSWORD_MANAGER_CANCEL_BUTTON)); |
| 404 ui::ResourceBundle::SmallFont)); | 411 nope_button_->SetStyle(views::Button::STYLE_BUTTON); |
| 405 | 412 nope_button_->SetFontList( |
| 406 combobox_model_.reset(new SavePasswordRefusalComboboxModel); | 413 ui::ResourceBundle::GetSharedInstance().GetFontList( |
| 407 refuse_combobox_.reset(new views::Combobox(combobox_model_.get())); | 414 ui::ResourceBundle::SmallFont)); |
| 408 refuse_combobox_->set_listener(this); | 415 } else { |
| 409 refuse_combobox_->SetStyle(views::Combobox::STYLE_ACTION); | 416 combobox_model_.reset(new SavePasswordRefusalComboboxModel); |
| 410 // TODO(mkwst): Need a mechanism to pipe a font list down into a combobox. | 417 refuse_combobox_.reset(new views::Combobox(combobox_model_.get())); |
| 418 refuse_combobox_->set_listener(this); | |
| 419 refuse_combobox_->SetStyle(views::Combobox::STYLE_ACTION); | |
| 420 // TODO(mkwst): Need a mechanism to pipe a font list down into a combobox. | |
| 421 } | |
| 422 if (!parent->model()->account_for_update_selection()) { | |
| 423 save_button_ = | |
| 424 new views::BlueButton(this, parent_->model()->save_button_text()); | |
| 425 save_button_->SetFontList( | |
| 426 ui::ResourceBundle::GetSharedInstance().GetFontList( | |
| 427 ui::ResourceBundle::SmallFont)); | |
| 428 } | |
| 411 | 429 |
| 412 // Title row. | 430 // Title row. |
| 413 views::StyledLabel* title_label = | 431 views::StyledLabel* title_label = |
| 414 new views::StyledLabel(parent_->model()->title(), this); | 432 new views::StyledLabel(parent_->model()->title(), this); |
| 415 title_label->SetBaseFontList( | 433 title_label->SetBaseFontList( |
| 416 ui::ResourceBundle::GetSharedInstance().GetFontList( | 434 ui::ResourceBundle::GetSharedInstance().GetFontList( |
| 417 ui::ResourceBundle::MediumFont)); | 435 ui::ResourceBundle::MediumFont)); |
| 418 if (!parent_->model()->title_brand_link_range().is_empty()) { | 436 if (!parent_->model()->title_brand_link_range().is_empty()) { |
| 419 title_label->AddStyleRange( | 437 title_label->AddStyleRange( |
| 420 parent_->model()->title_brand_link_range(), | 438 parent_->model()->title_brand_link_range(), |
| 421 views::StyledLabel::RangeStyleInfo::CreateForLink()); | 439 views::StyledLabel::RangeStyleInfo::CreateForLink()); |
| 422 } | 440 } |
| 423 BuildColumnSet(layout, SINGLE_VIEW_COLUMN_SET); | 441 BuildColumnSet(layout, SINGLE_VIEW_COLUMN_SET); |
| 424 layout->StartRow(0, SINGLE_VIEW_COLUMN_SET); | 442 layout->StartRow(0, SINGLE_VIEW_COLUMN_SET); |
| 425 layout->AddView(title_label); | 443 layout->AddView(title_label); |
| 426 layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing); | 444 layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing); |
| 427 | 445 |
| 428 // Credential row. | 446 // Credential row. |
| 429 layout->StartRow(0, SINGLE_VIEW_COLUMN_SET); | 447 layout->StartRow(0, SINGLE_VIEW_COLUMN_SET); |
| 430 layout->AddView(item); | 448 layout->AddView(item); |
| 431 | 449 |
| 432 // Button row. | 450 // Button row. |
| 433 BuildColumnSet(layout, DOUBLE_BUTTON_COLUMN_SET); | 451 ColumnSetType button_column_type = |
| 434 layout->StartRowWithPadding( | 452 parent->model()->account_for_update_selection() |
| 435 0, DOUBLE_BUTTON_COLUMN_SET, 0, views::kRelatedControlVerticalSpacing); | 453 ? SINGLE_BUTTON_COLUMN_SET |
| 436 layout->AddView(save_button_); | 454 : DOUBLE_BUTTON_COLUMN_SET; |
| 437 layout->AddView(refuse_combobox_.get()); | 455 BuildColumnSet(layout, button_column_type); |
| 456 layout->StartRowWithPadding(0, button_column_type, 0, | |
| 457 views::kRelatedControlVerticalSpacing); | |
| 458 if (parent->model()->account_for_update_selection()) { | |
| 459 layout->AddView(nope_button_); | |
| 460 } else { | |
| 461 layout->AddView(save_button_); | |
| 462 if (parent->model()->is_password_change_form_without_username()) | |
| 463 layout->AddView(nope_button_); | |
| 464 else | |
| 465 layout->AddView(refuse_combobox_.get()); | |
| 466 } | |
| 438 | 467 |
| 439 // Extra padding for visual awesomeness. | 468 // Extra padding for visual awesomeness. |
| 440 layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing); | 469 layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing); |
| 441 | 470 |
| 442 parent_->set_initially_focused_view(save_button_); | 471 parent_->set_initially_focused_view(save_button_); |
| 443 } | 472 } |
| 444 | 473 |
| 445 ManagePasswordsBubbleView::PendingView::~PendingView() { | 474 ManagePasswordsBubbleView::PendingView::~PendingView() { |
| 446 } | 475 } |
| 447 | 476 |
| 448 void ManagePasswordsBubbleView::PendingView::ButtonPressed( | 477 void ManagePasswordsBubbleView::PendingView::ButtonPressed( |
| 449 views::Button* sender, | 478 views::Button* sender, |
| 450 const ui::Event& event) { | 479 const ui::Event& event) { |
| 451 DCHECK(sender == save_button_); | 480 DCHECK(sender == save_button_ || sender == nope_button_); |
| 452 parent_->model()->OnSaveClicked(); | 481 if (sender == save_button_) |
| 482 parent_->model()->OnSaveClicked(); | |
| 453 parent_->Close(); | 483 parent_->Close(); |
| 454 } | 484 } |
| 455 | 485 |
| 456 void ManagePasswordsBubbleView::PendingView::StyledLabelLinkClicked( | 486 void ManagePasswordsBubbleView::PendingView::StyledLabelLinkClicked( |
| 457 const gfx::Range& range, | 487 const gfx::Range& range, |
| 458 int event_flags) { | 488 int event_flags) { |
| 459 DCHECK_EQ(range, parent_->model()->title_brand_link_range()); | 489 DCHECK_EQ(range, parent_->model()->title_brand_link_range()); |
| 460 parent_->model()->OnBrandLinkClicked(); | 490 parent_->model()->OnBrandLinkClicked(); |
| 461 } | 491 } |
| 462 | 492 |
| (...skipping 748 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1211 void ManagePasswordsBubbleView::NotifyNeverForThisSiteClicked() { | 1241 void ManagePasswordsBubbleView::NotifyNeverForThisSiteClicked() { |
| 1212 if (model()->local_credentials().empty()) { | 1242 if (model()->local_credentials().empty()) { |
| 1213 // Skip confirmation if there are no existing passwords for this site. | 1243 // Skip confirmation if there are no existing passwords for this site. |
| 1214 NotifyConfirmedNeverForThisSite(); | 1244 NotifyConfirmedNeverForThisSite(); |
| 1215 } else { | 1245 } else { |
| 1216 model()->OnConfirmationForNeverForThisSite(); | 1246 model()->OnConfirmationForNeverForThisSite(); |
| 1217 Refresh(); | 1247 Refresh(); |
| 1218 SizeToContents(); | 1248 SizeToContents(); |
| 1219 } | 1249 } |
| 1220 } | 1250 } |
| OLD | NEW |