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

Unified Diff: chrome/browser/ui/cocoa/passwords/credentials_selection_view.mm

Issue 1515553006: Change password bubble for Mac. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase, clean-up Created 5 years 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/cocoa/passwords/credentials_selection_view.mm
diff --git a/chrome/browser/ui/cocoa/passwords/credentials_selection_view.mm b/chrome/browser/ui/cocoa/passwords/credentials_selection_view.mm
new file mode 100644
index 0000000000000000000000000000000000000000..8829cb28fb20c93c13f71c56a647a2e44a6ce833
--- /dev/null
+++ b/chrome/browser/ui/cocoa/passwords/credentials_selection_view.mm
@@ -0,0 +1,105 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/ui/cocoa/passwords/credentials_selection_view.h"
+
+#include "chrome/browser/ui/chrome_style.h"
+#import "chrome/browser/ui/cocoa/bubble_combobox.h"
+#import "chrome/browser/ui/cocoa/passwords/passwords_bubble_utils.h"
+#include "chrome/browser/ui/passwords/manage_passwords_bubble_model.h"
+#include "ui/base/models/simple_combobox_model.h"
+
+namespace {
+
+const CGFloat kVerticalComboboxLabelSpacing = 6;
+
+NSPopUpButton* CreateUsernamesPopUpButton(
+ const std::vector<const autofill::PasswordForm*>& forms,
+ const base::string16& best_matched_username) {
+ std::vector<base::string16> usernames;
+ size_t best_matched_username_index = forms.size();
+ size_t preffered_form_index = forms.size();
+
+ for (size_t index = 0; index < forms.size(); ++index) {
+ usernames.push_back(forms[index]->username_value);
+ if (forms[index]->username_value == best_matched_username) {
+ best_matched_username_index = index;
+ }
+ if (forms[index]->preferred) {
+ preffered_form_index = index;
+ }
+ }
+
+ scoped_ptr<ui::SimpleComboboxModel> model(
vasilii 2015/12/15 15:58:01 Looks like without the scoped pointer it will work
dvadym 2015/12/16 14:16:30 Done.
+ new ui::SimpleComboboxModel(usernames));
+ base::scoped_nsobject<NSPopUpButton> button([[BubbleCombobox alloc]
+ initWithFrame:NSZeroRect
+ pullsDown:NO
+ model:model.get()]);
+ [button setFont:LabelFont()];
+
+ if (best_matched_username_index < forms.size()) {
+ [button selectItemAtIndex:best_matched_username_index];
+ } else if (preffered_form_index < forms.size()) {
+ [button selectItemAtIndex:preffered_form_index];
+ }
+
+ [button sizeToFit];
+ return button.autorelease();
+}
+
+} // namespace
+
+@implementation CredentialsSelectionView
+
+- (id)initWithModel:(ManagePasswordsBubbleModel*)model {
+ if ((self = [super init])) {
+ model_ = model;
+
+ // Create the pop up button with usernames and the password field.
+ usernamePopUpButton_.reset([CreateUsernamesPopUpButton(
+ model_->local_credentials().get(),
+ model_->pending_password().username_value) retain]);
+ passwordField_.reset(
+ [PasswordLabel(model_->pending_password().password_value) retain]);
+
+ // Calculate desired widths of username and password.
+ CGFloat firstWidth = NSMaxX([usernamePopUpButton_ frame]);
+ CGFloat secondWidth = NSMaxX([passwordField_ frame]);
+ std::pair<CGFloat, CGFloat> sizes = GetResizedColumns(
+ kDesiredRowWidth, std::make_pair(firstWidth, secondWidth));
+ CGFloat curX = 0;
+ CGFloat curY = kRelatedControlVerticalSpacing;
vasilii 2015/12/15 15:58:01 I'm not sure about this. You hardcode the margin h
dvadym 2015/12/16 14:16:30 Done, I've set curY to 0
+
+ [usernamePopUpButton_
+ setFrameSize:NSMakeSize(sizes.first,
+ NSHeight([usernamePopUpButton_ frame]))];
+ [self addSubview:usernamePopUpButton_];
+ [usernamePopUpButton_ setFrameOrigin:NSMakePoint(curX, curY)];
+
+ // Move to the right of the username and add the password.
+ curX = NSMaxX([usernamePopUpButton_ frame]) + kItemLabelSpacing;
+ [passwordField_ setFrameSize:NSMakeSize(sizes.second,
+ NSHeight([passwordField_ frame]))];
+
+ [passwordField_
+ setFrameOrigin:NSMakePoint(curX, curY + kVerticalComboboxLabelSpacing)];
vasilii 2015/12/15 15:58:01 I don't know how it looks like if the user changes
dvadym 2015/12/16 14:16:31 Thanks, I've replaced this constant by difference
+ [self addSubview:passwordField_];
+
+ // Move to the top-right of the password.
+ curY = NSMaxY([passwordField_ frame]) + kRelatedControlVerticalSpacing;
+
+ // Update the frame.
+ [self setFrameSize:NSMakeSize(kDesiredRowWidth, curY)];
+ }
+ return self;
+}
+
+- (const autofill::PasswordForm*)getSelectedCredentials {
+ size_t selected_index =
+ static_cast<size_t>([usernamePopUpButton_ indexOfSelectedItem]);
vasilii 2015/12/15 15:58:01 It can return -1.
dvadym 2015/12/16 14:16:31 Done.
+ return model_->local_credentials()[selected_index];
+}
+
+@end

Powered by Google App Engine
This is Rietveld 408576698