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

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

Issue 1610653002: Integrate the account chooser dialog on Mac. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: comments Created 4 years, 11 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/cocoa/passwords/account_chooser_view_controller.mm
diff --git a/chrome/browser/ui/cocoa/passwords/account_chooser_view_controller.mm b/chrome/browser/ui/cocoa/passwords/account_chooser_view_controller.mm
index ae58b66cd24ea7c5813f8771d7343731d20513c2..287192fdba9a0564527c88669ceb951b5758645c 100644
--- a/chrome/browser/ui/cocoa/passwords/account_chooser_view_controller.mm
+++ b/chrome/browser/ui/cocoa/passwords/account_chooser_view_controller.mm
@@ -7,14 +7,12 @@
#include <cmath>
#include "base/strings/sys_string_conversions.h"
-#include "chrome/browser/profiles/profile.h"
-#import "chrome/browser/ui/cocoa/bubble_combobox.h"
#import "chrome/browser/ui/cocoa/passwords/account_avatar_fetcher_manager.h"
#import "chrome/browser/ui/cocoa/passwords/passwords_bubble_utils.h"
-#include "chrome/browser/ui/passwords/account_chooser_more_combobox_model.h"
-#include "chrome/browser/ui/passwords/manage_passwords_bubble_model.h"
+#include "chrome/browser/ui/passwords/password_dialog_controller.h"
#include "chrome/grit/generated_resources.h"
#include "components/password_manager/core/common/credential_manager_types.h"
+#include "ui/base/cocoa/controls/hyperlink_text_view.h"
#include "ui/base/l10n/l10n_util.h"
@implementation CredentialItemCell {
@@ -37,44 +35,19 @@
}
@end
-@interface ManagePasswordsBubbleAccountChooserViewController()
-- (id)initWithModel:(ManagePasswordsBubbleModel*)model
- avatarManager:(AccountAvatarFetcherManager*)avatarManager
- delegate:(id<ManagePasswordsBubbleContentViewDelegate>)delegate;
+@interface AccountChooserViewController()
- (void)onCancelClicked:(id)sender;
-- (void)onLearnMoreClicked:(id)sender;
-- (void)onSettingsClicked:(id)sender;
-+ (NSArray*)credentialItemsForModel:(ManagePasswordsBubbleModel*)model
- delegate:(id<CredentialItemDelegate>)delegate;
-@property(nonatomic, readonly) NSButton* cancelButton;
-@property(nonatomic, readonly) BubbleCombobox* moreButton;
-@property(nonatomic, readonly) NSTableView* credentialsView;
++ (NSArray*)credentialItemsFromBridge:(AccountChooserBridge*)bridge
+ delegate:(id<CredentialItemDelegate>)delegate;
@end
-@implementation ManagePasswordsBubbleAccountChooserViewController
+@implementation AccountChooserViewController
-@synthesize cancelButton = cancelButton_;
-@synthesize moreButton = moreButton_;
-@synthesize credentialsView = credentialsView_;
-
-- (id)initWithModel:(ManagePasswordsBubbleModel*)model
- avatarManager:(AccountAvatarFetcherManager*)avatarManager
- delegate:(id<ManagePasswordsBubbleContentViewDelegate>)delegate {
- DCHECK(model);
- if (([super initWithDelegate:delegate])) {
- model_ = model;
- avatarManager_.reset([avatarManager retain]);
- }
- return self;
-}
-
-- (id)initWithModel:(ManagePasswordsBubbleModel*)model
- delegate:(id<ManagePasswordsBubbleContentViewDelegate>)delegate {
+- (id)initWithBridge:(AccountChooserBridge*)bridge {
base::scoped_nsobject<AccountAvatarFetcherManager> avatarManager(
[[AccountAvatarFetcherManager alloc]
- initWithRequestContext:model->GetProfile()->GetRequestContext()]);
- return
- [self initWithModel:model avatarManager:avatarManager delegate:delegate];
+ initWithRequestContext:bridge->GetRequestContext()]);
+ return [self initWithBridge:bridge avatarManager:avatarManager];
}
- (void)dealloc {
@@ -96,20 +69,24 @@
// | | | credential view |
// | ---- |
// | |
- // | [ More v] [ Cancel ] |
+ // | [ Cancel ] |
// ------------------------------------
// Create the views.
// Title.
- NSTextField* title =
- [self addTitleLabel:base::SysUTF16ToNSString(model_->title())
- toView:view];
- [title setAlignment:base::i18n::IsRTL() ? NSRightTextAlignment
- : NSLeftTextAlignment];
+ std::pair<base::string16, gfx::Range> title_text =
+ bridge_->GetDialogController()->GetAccoutChooserTitle();
+ titleView_ = TitleLabelWithLink(title_text.first, title_text.second, self);
+ // Force the text to wrap to fit in the bubble size.
+ [titleView_ setVerticallyResizable:YES];
+ const CGFloat width = kDesiredBubbleWidth - 2*kFramePadding;
+ [titleView_ setFrameSize:NSMakeSize(width, MAXFLOAT)];
+ [titleView_ sizeToFit];
+ [view addSubview:titleView_];
// Credentials list.
credentialItems_.reset(
- [[[self class] credentialItemsForModel:model_ delegate:self] retain]);
+ [[[self class] credentialItemsFromBridge:bridge_ delegate:self] retain]);
base::scoped_nsobject<NSTableView> credentialsView(
[[NSTableView alloc] initWithFrame:NSZeroRect]);
[credentialsView
@@ -124,49 +101,16 @@
[view addSubview:credentialsView_];
// "Cancel" button.
- cancelButton_ =
- [self addButton:l10n_util::GetNSString(
- IDS_CREDENTIAL_MANAGEMENT_ACCOUNT_CHOOSER_NO_THANKS)
- toView:view
- target:self
- action:@selector(onCancelClicked:)];
-
- // "More" button.
- AccountChooserMoreComboboxModel comboboxModel;
- moreButton_ = [[BubbleCombobox alloc] initWithFrame:NSZeroRect
- pullsDown:YES
- model:&comboboxModel];
- [moreButton_ sizeToFit];
- NSMenuItem* learnMoreItem = [moreButton_
- itemAtIndex:AccountChooserMoreComboboxModel::INDEX_LEARN_MORE];
- [learnMoreItem setTarget:self];
- [learnMoreItem setAction:@selector(onLearnMoreClicked:)];
- NSMenuItem* settingsItem =
- [moreButton_ itemAtIndex:AccountChooserMoreComboboxModel::INDEX_SETTINGS];
- [settingsItem setTarget:self];
- [settingsItem setAction:@selector(onSettingsClicked:)];
- [view addSubview:moreButton_];
+ cancelButton_ = DialogButton(l10n_util::GetNSString(
+ IDS_CREDENTIAL_MANAGEMENT_ACCOUNT_CHOOSER_NO_THANKS));
+ [cancelButton_ setTarget:self];
+ [cancelButton_ setAction:@selector(onCancelClicked:)];
+ [view addSubview:cancelButton_];
// Lay out the views.
- const CGFloat width =
- std::max(NSWidth([title frame]), NSWidth([credentialsView_ frame]));
- [cancelButton_
- setFrameOrigin:NSMakePoint(base::i18n::IsRTL()
- ? kFramePadding
- : kFramePadding + width -
- NSWidth([cancelButton_ frame]),
- kFramePadding)];
- [moreButton_
- setFrameOrigin:NSMakePoint(base::i18n::IsRTL()
- ? NSMaxX([cancelButton_ frame]) +
- kRelatedControlHorizontalPadding
- : NSMinX([cancelButton_ frame]) -
- kRelatedControlHorizontalPadding -
- NSWidth([moreButton_ frame]),
- std::ceil(kFramePadding +
- (NSHeight([cancelButton_ frame]) -
- NSHeight([moreButton_ frame])) /
- 2.0f))];
+ [cancelButton_ setFrameOrigin:NSMakePoint(
+ kFramePadding + width - NSWidth([cancelButton_ frame]),
+ kFramePadding)];
// The credentials TableView expands to fill available space.
[column setMaxWidth:width];
@@ -177,44 +121,36 @@
NSMaxY([cancelButton_ frame]) +
kUnrelatedControlVerticalPadding)];
- [title setFrameOrigin:NSMakePoint(
- base::i18n::IsRTL()
- ? kFramePadding + width - NSWidth([title frame])
- : kFramePadding,
- NSMaxY([credentialsView_ frame]) +
- kUnrelatedControlVerticalPadding)];
+ [titleView_ setFrameOrigin:NSMakePoint(
+ kFramePadding,
+ NSMaxY([credentialsView_ frame]) + kUnrelatedControlVerticalPadding)];
- // Compute the frame to hold all the views.
- const CGFloat frameWidth = width + 2 * kFramePadding;
- const CGFloat frameHeight = NSMaxY([title frame]) + kFramePadding;
- [view setFrame:NSMakeRect(0, 0, frameWidth, frameHeight)];
+ const CGFloat frameHeight = NSMaxY([titleView_ frame]) + kFramePadding;
+ [view setFrame:NSMakeRect(0, 0, kDesiredBubbleWidth, frameHeight)];
[self setView:view];
}
-- (void)onCancelClicked:(id)sender {
- model_->OnCancelClicked();
- [delegate_ viewShouldDismiss];
-}
-
-- (void)onLearnMoreClicked:(id)sender {
- // TODO(dconnelly): Open some help center article that's not written yet.
- [delegate_ viewShouldDismiss];
+- (BOOL)textView:(NSTextView*)textView
+ clickedOnLink:(id)link
+ atIndex:(NSUInteger)charIndex {
+ bridge_->GetDialogController()->OnSmartLockLinkClicked();
+ return YES;
}
-- (void)onSettingsClicked:(id)sender {
- model_->OnManageLinkClicked();
- [delegate_ viewShouldDismiss];
+- (void)onCancelClicked:(id)sender {
+ bridge_->PerformClose();
}
- (void)fetchAvatar:(const GURL&)avatarURL forView:(CredentialItemView*)view {
[avatarManager_ fetchAvatar:avatarURL forView:view];
}
-+ (NSArray*)credentialItemsForModel:(ManagePasswordsBubbleModel*)model
- delegate:(id<CredentialItemDelegate>)delegate {
++ (NSArray*)credentialItemsFromBridge:(AccountChooserBridge*)bridge
+ delegate:(id<CredentialItemDelegate>)delegate {
base::scoped_nsobject<NSMutableArray> items([[NSMutableArray alloc] init]);
- for (auto form : model->local_credentials()) {
+ PasswordDialogController* controller = bridge->GetDialogController();
+ for (const auto& form : controller->GetLocalForms()) {
base::scoped_nsobject<CredentialItemView> item([[CredentialItemView alloc]
initWithPasswordForm:*form
credentialType:password_manager::CredentialType::
@@ -225,7 +161,7 @@
[item setAutoresizingMask:NSViewWidthSizable];
[items addObject:item];
}
- for (auto form : model->federated_credentials()) {
+ for (const auto& form : controller->GetFederationsForms()) {
base::scoped_nsobject<CredentialItemView> item([[CredentialItemView alloc]
initWithPasswordForm:*form
credentialType:password_manager::CredentialType::
@@ -261,8 +197,34 @@
- (void)tableViewSelectionDidChange:(NSNotification *)notification {
CredentialItemView* item =
[credentialItems_.get() objectAtIndex:[credentialsView_ selectedRow]];
- model_->OnChooseCredentials(item.passwordForm, item.credentialType);
- [delegate_ viewShouldDismiss];
+ bridge_->GetDialogController()->OnChooseCredentials(item.passwordForm,
+ item.credentialType);
+}
+
+@end
+
+@implementation AccountChooserViewController(Testing)
+
+- (id)initWithBridge:(AccountChooserBridge*)bridge
+ avatarManager:(AccountAvatarFetcherManager*)avatarManager {
+ DCHECK(bridge);
+ if (self = [super initWithNibName:nil bundle:nil]) {
+ bridge_ = bridge;
+ avatarManager_.reset([avatarManager retain]);
+ }
+ return self;
+}
+
+- (NSButton*)cancelButton {
+ return cancelButton_;
+}
+
+- (NSTableView*)credentialsView {
+ return credentialsView_;
+}
+
+- (NSTextView*)titleView {
+ return titleView_;
}
@end

Powered by Google App Engine
This is Rietveld 408576698