| 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/macros.h" | 7 #include "base/macros.h" |
| 8 #include "base/metrics/user_metrics.h" | 8 #include "base/metrics/user_metrics.h" |
| 9 #include "base/strings/utf_string_conversions.h" | 9 #include "base/strings/utf_string_conversions.h" |
| 10 #include "base/timer/timer.h" | 10 #include "base/timer/timer.h" |
| 11 #include "chrome/browser/platform_util.h" | 11 #include "chrome/browser/platform_util.h" |
| 12 #include "chrome/browser/profiles/profile.h" | 12 #include "chrome/browser/profiles/profile.h" |
| 13 #include "chrome/browser/ui/browser.h" | 13 #include "chrome/browser/ui/browser.h" |
| 14 #include "chrome/browser/ui/browser_dialogs.h" | 14 #include "chrome/browser/ui/browser_dialogs.h" |
| 15 #include "chrome/browser/ui/browser_finder.h" | 15 #include "chrome/browser/ui/browser_finder.h" |
| 16 #include "chrome/browser/ui/browser_window.h" | 16 #include "chrome/browser/ui/browser_window.h" |
| 17 #include "chrome/browser/ui/exclusive_access/fullscreen_controller.h" | 17 #include "chrome/browser/ui/exclusive_access/fullscreen_controller.h" |
| 18 #include "chrome/browser/ui/passwords/password_dialog_prompts.h" | 18 #include "chrome/browser/ui/passwords/password_dialog_prompts.h" |
| 19 #include "chrome/browser/ui/passwords/passwords_model_delegate.h" | 19 #include "chrome/browser/ui/passwords/passwords_model_delegate.h" |
| 20 #include "chrome/browser/ui/views/harmony/chrome_layout_provider.h" | 20 #include "chrome/browser/ui/views/harmony/chrome_layout_provider.h" |
| 21 #include "chrome/browser/ui/views/harmony/chrome_typography.h" | 21 #include "chrome/browser/ui/views/harmony/chrome_typography.h" |
| 22 #include "chrome/browser/ui/views/passwords/credentials_item_view.h" | 22 #include "chrome/browser/ui/views/passwords/credentials_item_view.h" |
| 23 #include "chrome/browser/ui/views/passwords/credentials_selection_view.h" | 23 #include "chrome/browser/ui/views/passwords/credentials_selection_view.h" |
| 24 #include "chrome/browser/ui/views/passwords/manage_password_items_view.h" | 24 #include "chrome/browser/ui/views/passwords/manage_password_items_view.h" |
| 25 #include "chrome/browser/ui/views/passwords/manage_passwords_icon_views.h" | 25 #include "chrome/browser/ui/views/passwords/manage_passwords_icon_views.h" |
| 26 #include "chrome/grit/generated_resources.h" | 26 #include "chrome/grit/generated_resources.h" |
| 27 #include "components/password_manager/core/common/password_manager_features.h" |
| 27 #include "components/strings/grit/components_strings.h" | 28 #include "components/strings/grit/components_strings.h" |
| 28 #include "ui/base/l10n/l10n_util.h" | 29 #include "ui/base/l10n/l10n_util.h" |
| 29 #include "ui/base/material_design/material_design_controller.h" | 30 #include "ui/base/material_design/material_design_controller.h" |
| 30 #include "ui/base/resource/resource_bundle.h" | 31 #include "ui/base/resource/resource_bundle.h" |
| 31 #include "ui/base/ui_features.h" | 32 #include "ui/base/ui_features.h" |
| 32 #include "ui/gfx/color_palette.h" | 33 #include "ui/gfx/color_palette.h" |
| 33 #include "ui/gfx/image/image_skia.h" | 34 #include "ui/gfx/image/image_skia.h" |
| 34 #include "ui/native_theme/native_theme.h" | 35 #include "ui/native_theme/native_theme.h" |
| 35 #include "ui/views/controls/button/blue_button.h" | 36 #include "ui/views/controls/button/blue_button.h" |
| 36 #include "ui/views/controls/button/md_text_button.h" | 37 #include "ui/views/controls/button/md_text_button.h" |
| (...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 281 } | 282 } |
| 282 | 283 |
| 283 void ManagePasswordsBubbleView::AutoSigninView::OnTimer() { | 284 void ManagePasswordsBubbleView::AutoSigninView::OnTimer() { |
| 284 parent_->model()->OnAutoSignInToastTimeout(); | 285 parent_->model()->OnAutoSignInToastTimeout(); |
| 285 parent_->CloseBubble(); | 286 parent_->CloseBubble(); |
| 286 } | 287 } |
| 287 | 288 |
| 288 // ManagePasswordsBubbleView::PendingView ------------------------------------- | 289 // ManagePasswordsBubbleView::PendingView ------------------------------------- |
| 289 | 290 |
| 290 // A view offering the user the ability to save credentials. Contains a | 291 // A view offering the user the ability to save credentials. Contains a |
| 291 // single ManagePasswordItemsView, along with a "Save Passwords" button | 292 // single ManagePasswordItemsView, along with a "Save Passwords" button, |
| 292 // and a "Never" button. | 293 // a "Never" button and an "Edit" button to edit username field. |
| 293 class ManagePasswordsBubbleView::PendingView | 294 class ManagePasswordsBubbleView::PendingView |
| 294 : public views::View, | 295 : public views::View, |
| 295 public views::ButtonListener, | 296 public views::ButtonListener, |
| 296 public views::StyledLabelListener { | 297 public views::StyledLabelListener { |
| 297 public: | 298 public: |
| 298 explicit PendingView(ManagePasswordsBubbleView* parent); | 299 explicit PendingView(ManagePasswordsBubbleView* parent); |
| 299 ~PendingView() override; | 300 ~PendingView() override; |
| 300 | 301 |
| 301 private: | 302 private: |
| 302 // views::ButtonListener: | 303 // views::ButtonListener: |
| 303 void ButtonPressed(views::Button* sender, const ui::Event& event) override; | 304 void ButtonPressed(views::Button* sender, const ui::Event& event) override; |
| 304 | 305 |
| 305 // views::StyledLabelListener: | 306 // views::StyledLabelListener: |
| 306 void StyledLabelLinkClicked(views::StyledLabel* label, | 307 void StyledLabelLinkClicked(views::StyledLabel* label, |
| 307 const gfx::Range& range, | 308 const gfx::Range& range, |
| 308 int event_flags) override; | 309 int event_flags) override; |
| 309 | 310 |
| 310 ManagePasswordsBubbleView* parent_; | 311 ManagePasswordsBubbleView* parent_; |
| 311 | 312 |
| 313 views::Button* edit_button_; |
| 312 views::Button* save_button_; | 314 views::Button* save_button_; |
| 313 views::Button* never_button_; | 315 views::Button* never_button_; |
| 314 | 316 |
| 315 DISALLOW_COPY_AND_ASSIGN(PendingView); | 317 DISALLOW_COPY_AND_ASSIGN(PendingView); |
| 316 }; | 318 }; |
| 317 | 319 |
| 318 ManagePasswordsBubbleView::PendingView::PendingView( | 320 ManagePasswordsBubbleView::PendingView::PendingView( |
| 319 ManagePasswordsBubbleView* parent) | 321 ManagePasswordsBubbleView* parent) |
| 320 : parent_(parent) { | 322 : parent_(parent), edit_button_(nullptr) { |
| 321 views::GridLayout* layout = new views::GridLayout(this); | 323 views::GridLayout* layout = new views::GridLayout(this); |
| 322 layout->set_minimum_size(gfx::Size(kDesiredBubbleWidth, 0)); | 324 layout->set_minimum_size(gfx::Size(kDesiredBubbleWidth, 0)); |
| 323 SetLayoutManager(layout); | 325 SetLayoutManager(layout); |
| 324 | 326 |
| 325 // Create the pending credential item, save button and refusal combobox. | 327 // Create the pending credential item, save button and refusal combobox. |
| 326 ManagePasswordItemsView* item = nullptr; | 328 ManagePasswordItemsView* item = nullptr; |
| 327 if (!parent->model()->pending_password().username_value.empty()) { | 329 if (!parent->model()->pending_password().username_value.empty()) { |
| 328 item = new ManagePasswordItemsView(parent_->model(), | 330 item = new ManagePasswordItemsView(parent_->model(), |
| 329 &parent->model()->pending_password()); | 331 &parent->model()->pending_password()); |
| 330 } | 332 } |
| 333 if (base::FeatureList::IsEnabled( |
| 334 password_manager::features::kEnableUsernameCorrection)) { |
| 335 edit_button_ = views::MdTextButton::CreateSecondaryUiButton( |
| 336 this, l10n_util::GetStringUTF16(IDS_PASSWORD_MANAGER_EDIT_BUTTON)); |
| 337 } |
| 331 save_button_ = views::MdTextButton::CreateSecondaryUiBlueButton( | 338 save_button_ = views::MdTextButton::CreateSecondaryUiBlueButton( |
| 332 this, l10n_util::GetStringUTF16(IDS_PASSWORD_MANAGER_SAVE_BUTTON)); | 339 this, l10n_util::GetStringUTF16(IDS_PASSWORD_MANAGER_SAVE_BUTTON)); |
| 333 never_button_ = views::MdTextButton::CreateSecondaryUiButton( | 340 never_button_ = views::MdTextButton::CreateSecondaryUiButton( |
| 334 this, | 341 this, |
| 335 l10n_util::GetStringUTF16(IDS_PASSWORD_MANAGER_BUBBLE_BLACKLIST_BUTTON)); | 342 l10n_util::GetStringUTF16(IDS_PASSWORD_MANAGER_BUBBLE_BLACKLIST_BUTTON)); |
| 336 | 343 |
| 337 // Title row. | 344 // Title row. |
| 338 BuildColumnSet(layout, SINGLE_VIEW_COLUMN_SET); | 345 BuildColumnSet(layout, SINGLE_VIEW_COLUMN_SET); |
| 339 AddTitleRowWithLink(layout, parent_->model(), this); | 346 AddTitleRowWithLink(layout, parent_->model(), this); |
| 340 | 347 |
| 341 // Credential row. | 348 // Credential row. |
| 342 if (item) { | 349 if (item) { |
| 343 layout->StartRow(0, SINGLE_VIEW_COLUMN_SET); | 350 layout->StartRow(0, SINGLE_VIEW_COLUMN_SET); |
| 344 layout->AddView(item); | 351 layout->AddView(item); |
| 345 layout->AddPaddingRow(0, | 352 layout->AddPaddingRow(0, |
| 346 ChromeLayoutProvider::Get() | 353 ChromeLayoutProvider::Get() |
| 347 ->GetInsetsMetric(views::INSETS_DIALOG_CONTENTS) | 354 ->GetInsetsMetric(views::INSETS_DIALOG_CONTENTS) |
| 348 .bottom()); | 355 .bottom()); |
| 349 } | 356 } |
| 350 | 357 |
| 351 // Button row. | 358 // Button row. |
| 352 BuildColumnSet(layout, DOUBLE_BUTTON_COLUMN_SET); | 359 ColumnSetType column_set_type = |
| 353 layout->StartRow(0, DOUBLE_BUTTON_COLUMN_SET); | 360 edit_button_ ? TRIPLE_BUTTON_COLUMN_SET : DOUBLE_BUTTON_COLUMN_SET; |
| 361 BuildColumnSet(layout, column_set_type); |
| 362 layout->StartRow(0, column_set_type); |
| 363 if (column_set_type == TRIPLE_BUTTON_COLUMN_SET) { |
| 364 layout->AddView(edit_button_); |
| 365 } |
| 354 layout->AddView(save_button_); | 366 layout->AddView(save_button_); |
| 355 layout->AddView(never_button_); | 367 layout->AddView(never_button_); |
| 356 | 368 |
| 357 parent_->set_initially_focused_view(save_button_); | 369 parent_->set_initially_focused_view(save_button_); |
| 358 } | 370 } |
| 359 | 371 |
| 360 ManagePasswordsBubbleView::PendingView::~PendingView() { | 372 ManagePasswordsBubbleView::PendingView::~PendingView() { |
| 361 } | 373 } |
| 362 | 374 |
| 363 void ManagePasswordsBubbleView::PendingView::ButtonPressed( | 375 void ManagePasswordsBubbleView::PendingView::ButtonPressed( |
| 364 views::Button* sender, | 376 views::Button* sender, |
| 365 const ui::Event& event) { | 377 const ui::Event& event) { |
| 366 if (sender == save_button_) { | 378 // TODO(https://crbug.com/734965): Implement edit button logic. |
| 379 if (sender == edit_button_) { |
| 380 return; |
| 381 } else if (sender == save_button_) { |
| 367 parent_->model()->OnSaveClicked(); | 382 parent_->model()->OnSaveClicked(); |
| 368 if (parent_->model()->ReplaceToShowPromotionIfNeeded()) { | 383 if (parent_->model()->ReplaceToShowPromotionIfNeeded()) { |
| 369 parent_->Refresh(); | 384 parent_->Refresh(); |
| 370 return; | 385 return; |
| 371 } | 386 } |
| 372 } else if (sender == never_button_) { | 387 } else if (sender == never_button_) { |
| 373 parent_->model()->OnNeverForThisSiteClicked(); | 388 parent_->model()->OnNeverForThisSiteClicked(); |
| 374 } else { | 389 } else { |
| 375 NOTREACHED(); | 390 NOTREACHED(); |
| 376 } | 391 } |
| (...skipping 524 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 901 } else if (model_.state() == | 916 } else if (model_.state() == |
| 902 password_manager::ui::CHROME_DESKTOP_IOS_PROMO_STATE) { | 917 password_manager::ui::CHROME_DESKTOP_IOS_PROMO_STATE) { |
| 903 AddChildView(new DesktopIOSPromotionBubbleView( | 918 AddChildView(new DesktopIOSPromotionBubbleView( |
| 904 model_.GetProfile(), | 919 model_.GetProfile(), |
| 905 desktop_ios_promotion::PromotionEntryPoint::SAVE_PASSWORD_BUBBLE)); | 920 desktop_ios_promotion::PromotionEntryPoint::SAVE_PASSWORD_BUBBLE)); |
| 906 #endif | 921 #endif |
| 907 } else { | 922 } else { |
| 908 AddChildView(new ManageView(this)); | 923 AddChildView(new ManageView(this)); |
| 909 } | 924 } |
| 910 } | 925 } |
| OLD | NEW |