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

Side by Side Diff: chrome/browser/ui/views/passwords/manage_passwords_bubble_view.cc

Issue 2954093002: Adding an edit button for username correction while saving new credentials for password management. (Closed)
Patch Set: Experiment constraints added Created 3 years, 6 months 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 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
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_;
vasilii 2017/06/23 13:27:19 potentially uninitialized in the constructor
irmakk 2017/06/23 14:10:02 Done.
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) {
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 base::FeatureList::IsEnabled(
361 password_manager::features::kEnableUsernameCorrection)
vasilii 2017/06/23 13:27:19 I'd rather check |edit_button_| here. There are ca
irmakk 2017/06/23 14:10:02 Done.
362 ? TRIPLE_BUTTON_COLUMN_SET
363 : DOUBLE_BUTTON_COLUMN_SET;
364 BuildColumnSet(layout, column_set_type);
365 layout->StartRow(0, column_set_type);
366 if (column_set_type == TRIPLE_BUTTON_COLUMN_SET) {
367 layout->AddView(edit_button_);
368 }
354 layout->AddView(save_button_); 369 layout->AddView(save_button_);
355 layout->AddView(never_button_); 370 layout->AddView(never_button_);
356 371
357 parent_->set_initially_focused_view(save_button_); 372 parent_->set_initially_focused_view(save_button_);
358 } 373 }
359 374
360 ManagePasswordsBubbleView::PendingView::~PendingView() { 375 ManagePasswordsBubbleView::PendingView::~PendingView() {
361 } 376 }
362 377
363 void ManagePasswordsBubbleView::PendingView::ButtonPressed( 378 void ManagePasswordsBubbleView::PendingView::ButtonPressed(
364 views::Button* sender, 379 views::Button* sender,
365 const ui::Event& event) { 380 const ui::Event& event) {
366 if (sender == save_button_) { 381 // TODO(https://crbug.com/734965): Implement edit button logic.
382 if (sender == edit_button_) {
383 return;
384 } else if (sender == save_button_) {
367 parent_->model()->OnSaveClicked(); 385 parent_->model()->OnSaveClicked();
368 if (parent_->model()->ReplaceToShowPromotionIfNeeded()) { 386 if (parent_->model()->ReplaceToShowPromotionIfNeeded()) {
369 parent_->Refresh(); 387 parent_->Refresh();
370 return; 388 return;
371 } 389 }
372 } else if (sender == never_button_) { 390 } else if (sender == never_button_) {
373 parent_->model()->OnNeverForThisSiteClicked(); 391 parent_->model()->OnNeverForThisSiteClicked();
374 } else { 392 } else {
375 NOTREACHED(); 393 NOTREACHED();
376 } 394 }
(...skipping 524 matching lines...) Expand 10 before | Expand all | Expand 10 after
901 } else if (model_.state() == 919 } else if (model_.state() ==
902 password_manager::ui::CHROME_DESKTOP_IOS_PROMO_STATE) { 920 password_manager::ui::CHROME_DESKTOP_IOS_PROMO_STATE) {
903 AddChildView(new DesktopIOSPromotionBubbleView( 921 AddChildView(new DesktopIOSPromotionBubbleView(
904 model_.GetProfile(), 922 model_.GetProfile(),
905 desktop_ios_promotion::PromotionEntryPoint::SAVE_PASSWORD_BUBBLE)); 923 desktop_ios_promotion::PromotionEntryPoint::SAVE_PASSWORD_BUBBLE));
906 #endif 924 #endif
907 } else { 925 } else {
908 AddChildView(new ManageView(this)); 926 AddChildView(new ManageView(this));
909 } 927 }
910 } 928 }
OLDNEW
« no previous file with comments | « chrome/app/generated_resources.grd ('k') | components/password_manager/core/common/password_manager_features.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698