| Index: chrome/browser/ui/cocoa/passwords/manage_passwords_bubble_pending_view_controller.mm
|
| diff --git a/chrome/browser/ui/cocoa/passwords/manage_passwords_bubble_pending_view_controller.mm b/chrome/browser/ui/cocoa/passwords/manage_passwords_bubble_pending_view_controller.mm
|
| deleted file mode 100644
|
| index 5e65bde24933bd67a752327f837c5da52ea3ab23..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/ui/cocoa/passwords/manage_passwords_bubble_pending_view_controller.mm
|
| +++ /dev/null
|
| @@ -1,240 +0,0 @@
|
| -// Copyright 2014 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 <algorithm>
|
| -
|
| -#import "chrome/browser/ui/cocoa/passwords/manage_passwords_bubble_pending_view_controller.h"
|
| -
|
| -#include "base/strings/sys_string_conversions.h"
|
| -#include "chrome/browser/ui/chrome_style.h"
|
| -#import "chrome/browser/ui/cocoa/hover_close_button.h"
|
| -#import "chrome/browser/ui/cocoa/passwords/manage_password_item_view_controller.h"
|
| -#include "chrome/browser/ui/passwords/manage_passwords_bubble_model.h"
|
| -#include "chrome/grit/generated_resources.h"
|
| -#include "skia/ext/skia_utils_mac.h"
|
| -#import "third_party/google_toolbox_for_mac/src/AppKit/GTMUILocalizerAndLayoutTweaker.h"
|
| -#import "ui/base/cocoa/controls/hyperlink_text_view.h"
|
| -#include "ui/base/l10n/l10n_util.h"
|
| -
|
| -using namespace password_manager::mac::ui;
|
| -
|
| -const SkColor kWarmWelcomeColor = SkColorSetRGB(0x64, 0x64, 0x64);
|
| -
|
| -@interface ManagePasswordsBubblePendingViewController ()
|
| -- (void)onSaveClicked:(id)sender;
|
| -- (void)onNeverForThisSiteClicked:(id)sender;
|
| -@end
|
| -
|
| -@implementation ManagePasswordsBubblePendingViewController
|
| -
|
| -- (id)initWithModel:(ManagePasswordsBubbleModel*)model
|
| - delegate:(id<ManagePasswordsBubbleContentViewDelegate>)delegate {
|
| - if (([super initWithDelegate:delegate])) {
|
| - model_ = model;
|
| - }
|
| - return self;
|
| -}
|
| -
|
| -- (NSButton*)defaultButton {
|
| - return saveButton_;
|
| -}
|
| -
|
| -- (void)onSaveClicked:(id)sender {
|
| - model_->OnSaveClicked();
|
| - [delegate_ viewShouldDismiss];
|
| -}
|
| -
|
| -- (void)onNeverForThisSiteClicked:(id)sender {
|
| - model_->OnNeverForThisSiteClicked();
|
| - [delegate_ viewShouldDismiss];
|
| -}
|
| -
|
| -- (BOOL)textView:(NSTextView*)textView
|
| - clickedOnLink:(id)link
|
| - atIndex:(NSUInteger)charIndex {
|
| - model_->OnBrandLinkClicked();
|
| - [delegate_ viewShouldDismiss];
|
| - return YES;
|
| -}
|
| -
|
| -- (base::scoped_nsobject<NSButton>)newCloseButton {
|
| - const int dimension = chrome_style::GetCloseButtonSize();
|
| - NSRect frame = NSMakeRect(0, 0, dimension, dimension);
|
| - base::scoped_nsobject<NSButton> button(
|
| - [[WebUIHoverCloseButton alloc] initWithFrame:frame]);
|
| - [button setAction:@selector(viewShouldDismiss)];
|
| - [button setTarget:delegate_];
|
| - return button;
|
| -}
|
| -
|
| -- (void)loadView {
|
| - base::scoped_nsobject<NSView> view([[NSView alloc] initWithFrame:NSZeroRect]);
|
| -
|
| - // -----------------------------------
|
| - // | Title x |
|
| - // | username password |
|
| - // | Smart Lock welcome (optional) |
|
| - // | [Never] [Save] |
|
| - // -----------------------------------
|
| -
|
| - // The title text depends on whether the user is signed in and therefore syncs
|
| - // their password
|
| - // Do you want [Google Smart Lock]/Chrome/Chromium to save password
|
| - // for this site.
|
| -
|
| - // The bubble should be wide enough to fit the title row, the username and
|
| - // password row, and the buttons row on one line each, but not smaller than
|
| - // kDesiredBubbleWidth.
|
| -
|
| - // Create the elements and add them to the view.
|
| -
|
| - // Close button.
|
| - closeButton_ = [self newCloseButton];
|
| - [view addSubview:closeButton_];
|
| -
|
| - // Title.
|
| - base::scoped_nsobject<HyperlinkTextView> titleView(
|
| - [[HyperlinkTextView alloc] initWithFrame:NSZeroRect]);
|
| - NSColor* textColor = [NSColor blackColor];
|
| - NSFont* font = ResourceBundle::GetSharedInstance()
|
| - .GetFontList(ResourceBundle::SmallFont)
|
| - .GetPrimaryFont()
|
| - .GetNativeFont();
|
| - [titleView setMessage:base::SysUTF16ToNSString(model_->title())
|
| - withFont:font
|
| - messageColor:textColor];
|
| - NSRange titleBrandLinkRange = model_->title_brand_link_range().ToNSRange();
|
| - if (titleBrandLinkRange.length) {
|
| - NSColor* linkColor =
|
| - gfx::SkColorToCalibratedNSColor(chrome_style::GetLinkColor());
|
| - [titleView addLinkRange:titleBrandLinkRange
|
| - withURL:@"about:blank" // using a link here is bad ui
|
| - linkColor:linkColor];
|
| - [titleView.get() setDelegate:self];
|
| -
|
| - // Create the link with no underlining.
|
| - [titleView setLinkTextAttributes:nil];
|
| - NSTextStorage* text = [titleView textStorage];
|
| - [text addAttribute:NSUnderlineStyleAttributeName
|
| - value:@(NSUnderlineStyleNone)
|
| - range:titleBrandLinkRange];
|
| - } else {
|
| - // TODO(vasilii): remove if crbug.com/515189 is fixed.
|
| - [titleView setRefusesFirstResponder:YES];
|
| - }
|
| -
|
| - // Force the text to wrap to fit in the bubble size.
|
| - int titleRightPadding =
|
| - 2 * chrome_style::kCloseButtonPadding + NSWidth([closeButton_ frame]);
|
| - int titleWidth = kDesiredBubbleWidth - kFramePadding - titleRightPadding;
|
| - [titleView setVerticallyResizable:YES];
|
| - [titleView setFrameSize:NSMakeSize(titleWidth, MAXFLOAT)];
|
| - [[titleView textContainer] setLineFragmentPadding:0];
|
| - [titleView sizeToFit];
|
| -
|
| - [view addSubview:titleView];
|
| -
|
| - // Password item.
|
| - // It should be at least as wide as the box without the padding.
|
| - std::vector<const autofill::PasswordForm*> password_forms;
|
| - password_forms.push_back(&model_->pending_password());
|
| - passwordItem_.reset([[PasswordsListViewController alloc]
|
| - initWithModel:model_
|
| - forms:password_forms]);
|
| - NSView* password = [passwordItem_ view];
|
| - [view addSubview:password];
|
| -
|
| - base::scoped_nsobject<NSTextField> warm_welcome;
|
| - if (model_->ShouldShowGoogleSmartLockWelcome()) {
|
| - NSString* label_text =
|
| - l10n_util::GetNSString(IDS_PASSWORD_MANAGER_SMART_LOCK_WELCOME);
|
| - warm_welcome.reset([[self addLabel:label_text
|
| - toView:view] retain]);
|
| - [warm_welcome setFrameSize:NSMakeSize(kDesiredBubbleWidth - 2*kFramePadding,
|
| - MAXFLOAT)];
|
| - [GTMUILocalizerAndLayoutTweaker sizeToFitFixedWidthTextField:warm_welcome];
|
| - NSColor* color = gfx::SkColorToCalibratedNSColor(kWarmWelcomeColor);
|
| - [warm_welcome setTextColor:color];
|
| - }
|
| -
|
| - // Save button.
|
| - saveButton_.reset(
|
| - [[self addButton:l10n_util::GetNSString(IDS_PASSWORD_MANAGER_SAVE_BUTTON)
|
| - toView:view
|
| - target:self
|
| - action:@selector(onSaveClicked:)] retain]);
|
| -
|
| - // Never button.
|
| - NSString* neverButtonText =
|
| - l10n_util::GetNSString(IDS_PASSWORD_MANAGER_BUBBLE_BLACKLIST_BUTTON);
|
| - neverButton_.reset(
|
| - [[self addButton:neverButtonText
|
| - toView:view
|
| - target:self
|
| - action:@selector(onNeverForThisSiteClicked:)] retain]);
|
| -
|
| - // Compute the bubble width using the password item.
|
| - const CGFloat contentWidth =
|
| - kFramePadding + NSWidth([titleView frame]) + titleRightPadding;
|
| - const CGFloat width = std::max(kDesiredBubbleWidth, contentWidth);
|
| -
|
| - // Layout the elements, starting at the bottom and moving up.
|
| -
|
| - // Buttons go on the bottom row and are right-aligned.
|
| - // Start with [Save].
|
| - CGFloat curX = width - kFramePadding - NSWidth([saveButton_ frame]);
|
| - CGFloat curY = kFramePadding;
|
| - [saveButton_ setFrameOrigin:NSMakePoint(curX, curY)];
|
| -
|
| - // [Never] goes to the left of [Save].
|
| - curX -= kRelatedControlHorizontalPadding + NSWidth([neverButton_ frame]);
|
| - [neverButton_ setFrameOrigin:NSMakePoint(curX, curY)];
|
| -
|
| - curX = kFramePadding;
|
| - curY = NSMaxY([saveButton_ frame]) + kUnrelatedControlVerticalPadding;
|
| - // The Smart Lock warm welcome is placed above after some padding.
|
| - if (warm_welcome) {
|
| - [warm_welcome setFrameOrigin:NSMakePoint(curX, curY)];
|
| - curY = NSMaxY([warm_welcome frame]) + kUnrelatedControlVerticalPadding;
|
| - }
|
| -
|
| - // Password item goes on the next row.
|
| - [password setFrameOrigin:NSMakePoint(curX, curY)];
|
| -
|
| - // Title goes at the top after some padding.
|
| - curY = NSMaxY([password frame]) + kUnrelatedControlVerticalPadding;
|
| - [titleView setFrameOrigin:NSMakePoint(curX, curY)];
|
| - const CGFloat height = NSMaxY([titleView frame]) + kFramePadding;
|
| -
|
| - // The close button is in the corner.
|
| - NSPoint closeButtonOrigin = NSMakePoint(
|
| - width - NSWidth([closeButton_ frame]) - chrome_style::kCloseButtonPadding,
|
| - height - NSHeight([closeButton_ frame]) -
|
| - chrome_style::kCloseButtonPadding);
|
| - [closeButton_ setFrameOrigin:closeButtonOrigin];
|
| -
|
| - // Update the bubble size.
|
| -
|
| - [view setFrame:NSMakeRect(0, 0, width, height)];
|
| -
|
| - [self setView:view];
|
| -}
|
| -
|
| -@end
|
| -
|
| -@implementation ManagePasswordsBubblePendingViewController (Testing)
|
| -
|
| -- (NSButton*)saveButton {
|
| - return saveButton_.get();
|
| -}
|
| -
|
| -- (NSButton*)neverButton {
|
| - return neverButton_.get();
|
| -}
|
| -
|
| -- (NSButton*)closeButton {
|
| - return closeButton_.get();
|
| -}
|
| -
|
| -@end
|
|
|