manage_password_item_view.cc revision 4ad1aa43a48567659193a298fad74f55e00b3dd9
1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// found in the LICENSE file. 4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/ui/views/passwords/manage_password_item_view.h" 6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "grit/generated_resources.h" 8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "grit/ui_resources.h" 9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "ui/base/l10n/l10n_util.h" 104ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch#include "ui/base/resource/resource_bundle.h" 11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "ui/views/controls/button/button.h" 124ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch#include "ui/views/controls/button/image_button.h" 13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "ui/views/layout/grid_layout.h" 14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "ui/views/layout/layout_constants.h" 15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)ManagePasswordItemView::ManagePasswordItemView( 17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ManagePasswordsBubbleModel* manage_passwords_bubble_model, 18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) autofill::PasswordForm password_form, 19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) int field_1_width, 20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) int field_2_width) 21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) : manage_passwords_bubble_model_(manage_passwords_bubble_model), 22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) password_form_(password_form), 23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) delete_password_(false), 24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) field_1_width_(field_1_width), 25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) field_2_width_(field_2_width) { 26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) views::GridLayout* layout = new views::GridLayout(this); 27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance(); 28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SetLayoutManager(layout); 29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const int column_set_save_id = 0; 31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) views::ColumnSet* column_set_save = layout->AddColumnSet(column_set_save_id); 32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) column_set_save->AddPaddingColumn(0, views::kItemLabelSpacing); 33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) column_set_save->AddColumn( 34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) views::GridLayout::FILL, views::GridLayout::FILL, 0, 35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) views::GridLayout::FIXED, field_1_width_, field_1_width_); 36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) column_set_save->AddPaddingColumn(0, views::kItemLabelSpacing); 37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) column_set_save->AddColumn( 38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) views::GridLayout::FILL, views::GridLayout::FILL, 1, 39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) views::GridLayout::USE_PREF, field_2_width_, field_2_width_); 40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) column_set_save->AddPaddingColumn(0, views::kItemLabelSpacing); 41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const int column_set_manage_id = 1; 43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) views::ColumnSet* column_set_manage = 44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) layout->AddColumnSet(column_set_manage_id); 45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) column_set_manage->AddPaddingColumn(0, views::kItemLabelSpacing); 46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) column_set_manage->AddColumn( 47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) views::GridLayout::FILL, views::GridLayout::FILL, 0, 48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) views::GridLayout::FIXED, field_1_width_, field_1_width_); 49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) column_set_manage->AddPaddingColumn(0, views::kItemLabelSpacing); 50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) column_set_manage->AddColumn( 51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) views::GridLayout::FILL, views::GridLayout::FILL, 1, 52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) views::GridLayout::USE_PREF, field_2_width_, field_2_width_); 53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) column_set_manage->AddColumn(views::GridLayout::TRAILING, 54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) views::GridLayout::FILL, 0, views::GridLayout::USE_PREF, 0, 0); 554ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch column_set_manage->AddPaddingColumn(0, views::kItemLabelSpacing); 56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (manage_passwords_bubble_model_->manage_passwords_bubble_state() != 58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ManagePasswordsBubbleModel::PASSWORD_TO_BE_SAVED) 594ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch layout->StartRowWithPadding(0, column_set_manage_id, 604ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch 0, views::kRelatedControlVerticalSpacing); 61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) else 624ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch layout->StartRowWithPadding(0, column_set_save_id, 634ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch 0, views::kRelatedControlVerticalSpacing); 64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) label_1_ = new views::Label(password_form_.username_value); 66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) label_1_->SetHorizontalAlignment(gfx::ALIGN_LEFT); 67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) label_2_ = 69a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) new views::Link(GetPasswordDisplayString(password_form_.password_value)); 70f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) label_2_->SetHorizontalAlignment(gfx::ALIGN_LEFT); 71a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) label_2_->set_listener(this); 725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) label_2_->SetFocusable(false); 73a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) label_2_->SetEnabled(false); 74a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) label_2_->SetUnderline(false); 75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 764ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch delete_button_ = new views::ImageButton(this); 774ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch delete_button_->SetImage(views::ImageButton::STATE_NORMAL, 784ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch rb->GetImageNamed(IDR_CLOSE_2).ToImageSkia()); 794ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch delete_button_->SetImage(views::ImageButton::STATE_HOVERED, 804ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch rb->GetImageNamed(IDR_CLOSE_2_H).ToImageSkia()); 814ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch delete_button_->SetImage(views::ImageButton::STATE_PRESSED, 824ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch rb->GetImageNamed(IDR_CLOSE_2_P).ToImageSkia()); 83f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 84f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) layout->AddView(label_1_, 1, 1, 854ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch views::GridLayout::FILL, views::GridLayout::FILL); 86f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) layout->AddView(label_2_, 1, 1, 874ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch views::GridLayout::FILL, views::GridLayout::FILL); 88a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 89f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (manage_passwords_bubble_model_->manage_passwords_bubble_state() != 90f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ManagePasswordsBubbleModel::PASSWORD_TO_BE_SAVED) { 91a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) layout->AddView(delete_button_, 1, 1, 924ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch views::GridLayout::FILL, views::GridLayout::FILL); 93f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 944ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing); 95f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 96f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 97f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// static 985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::string16 ManagePasswordItemView::GetPasswordDisplayString( 99a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& password) { 100a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const wchar_t kPasswordBullet = 0x2022; 101a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const size_t kMaxPasswordChar = 22; 102a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return base::string16(std::min(password.length(), kMaxPasswordChar), 103a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) kPasswordBullet); 104f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 105f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 106f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)ManagePasswordItemView::~ManagePasswordItemView() { 107f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (delete_password_) 108f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) manage_passwords_bubble_model_->DeleteFromBestMatches(password_form_); 109f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 110f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 111f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void ManagePasswordItemView::Refresh() { 112f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (delete_password_) { 113f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) label_1_->SetText(l10n_util::GetStringUTF16(IDS_MANAGE_PASSWORDS_DELETED)); 114f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) label_2_->SetText(l10n_util::GetStringUTF16(IDS_MANAGE_PASSWORDS_UNDO)); 115f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) label_2_->SetHorizontalAlignment(gfx::ALIGN_RIGHT); 116a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) label_2_->SetEnabled(true); 117a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) delete_button_->SetVisible(false); 118a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) manage_passwords_bubble_model_->OnPasswordAction(password_form_, true); 119f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } else { 120f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) label_1_->SetText(password_form_.username_value); 121f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) label_2_->SetText(GetPasswordDisplayString(password_form_.password_value)); 122f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) label_2_->SetHorizontalAlignment(gfx::ALIGN_LEFT); 123a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) label_2_->SetEnabled(false); 124a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) delete_button_->SetVisible(true); 125a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) manage_passwords_bubble_model_->OnPasswordAction(password_form_, false); 126f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 127f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 128f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 129f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void ManagePasswordItemView::ButtonPressed(views::Button* sender, 130f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const ui::Event& event) { 131a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) DCHECK_EQ(delete_button_, sender); 132a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) delete_password_ = true; 133a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) Refresh(); 134a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 135a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 136a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void ManagePasswordItemView::LinkClicked(views::Link* source, 137a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) int event_flags) { 138a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) DCHECK_EQ(source, label_2_); 139a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) delete_password_ = false; 140f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Refresh(); 141f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 142