manage_password_item_view.cc revision 010d83a9304c5a91596085d917d248abff47903a
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) 70529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "chrome/browser/ui/passwords/manage_passwords_bubble_model.h" 8010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "components/password_manager/core/common/password_manager_ui.h" 9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "grit/generated_resources.h" 10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "grit/ui_resources.h" 11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "ui/base/l10n/l10n_util.h" 124ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch#include "ui/base/resource/resource_bundle.h" 13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "ui/views/controls/button/button.h" 144ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch#include "ui/views/controls/button/image_button.h" 15c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "ui/views/layout/fill_layout.h" 16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "ui/views/layout/grid_layout.h" 17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "ui/views/layout/layout_constants.h" 18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 19010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)namespace { 20010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 21010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)enum FieldType { USERNAME_FIELD, PASSWORD_FIELD }; 22010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 23010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// Upper limit on the size of the username and password fields. 24010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)const int kUsernameFieldSize = 30; 25010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)const int kPasswordFieldSize = 22; 26010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 27010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// Returns the width of |type| field. 28010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)int GetFieldWidth(FieldType type) { 29010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return ui::ResourceBundle::GetSharedInstance() 30010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) .GetFontList(ui::ResourceBundle::SmallFont) 31010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) .GetExpectedTextWidth(type == USERNAME_FIELD ? kUsernameFieldSize 32010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) : kPasswordFieldSize); 33010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 34010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 35010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)int FirstFieldWidth() { 36010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return std::max( 37010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) GetFieldWidth(USERNAME_FIELD), 38010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) views::Label(l10n_util::GetStringUTF16(IDS_MANAGE_PASSWORDS_DELETED)) 39010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) .GetPreferredSize() 40010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) .width()); 41010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 42010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 43010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)int SecondFieldWidth() { 44010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return std::max( 45010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) GetFieldWidth(PASSWORD_FIELD), 46010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) views::Label(l10n_util::GetStringUTF16(IDS_MANAGE_PASSWORDS_UNDO)) 47010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) .GetPreferredSize() 48010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) .width()); 49010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 50010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 51010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)enum ColumnSets { TWO_COLUMN_SET = 0, THREE_COLUMN_SET }; 52010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 53010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void BuildColumnSet(views::GridLayout* layout, int column_set_id) { 54010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) views::ColumnSet* column_set = layout->AddColumnSet(column_set_id); 55010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 56010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // The username/"Deleted!" field. 57010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) column_set->AddPaddingColumn(0, views::kItemLabelSpacing); 58010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) column_set->AddColumn(views::GridLayout::FILL, 59010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) views::GridLayout::FILL, 60010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 0, 61010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) views::GridLayout::FIXED, 62010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) FirstFieldWidth(), 63010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) FirstFieldWidth()); 64010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 65010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // The password/"Undo!" field. 66010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) column_set->AddPaddingColumn(0, views::kItemLabelSpacing); 67010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) column_set->AddColumn(views::GridLayout::FILL, 68010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) views::GridLayout::FILL, 69010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 1, 70010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) views::GridLayout::USE_PREF, 71010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) SecondFieldWidth(), 72010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) SecondFieldWidth()); 73010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 74010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // If we're in manage-mode, we need another column for the delete button. 75010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (column_set_id == THREE_COLUMN_SET) { 76010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) column_set->AddPaddingColumn(0, views::kItemLabelSpacing); 77010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) column_set->AddColumn(views::GridLayout::TRAILING, 78010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) views::GridLayout::FILL, 79010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 0, 80010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) views::GridLayout::USE_PREF, 81010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 0, 82010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 0); 83010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 84010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) column_set->AddPaddingColumn(0, views::kItemLabelSpacing); 85010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 86010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 87010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)views::Label* GenerateUsernameLabel(const autofill::PasswordForm& form) { 88010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) views::Label* label = new views::Label(form.username_value); 89010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) label->SetFontList(ui::ResourceBundle::GetSharedInstance().GetFontList( 90010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ui::ResourceBundle::SmallFont)); 91010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) label->SetHorizontalAlignment(gfx::ALIGN_LEFT); 92010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return label; 93010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 94010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 95010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)views::Label* GeneratePasswordLabel(const autofill::PasswordForm& form) { 96010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) views::Label* label = new views::Label(form.password_value); 97010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) label->SetFontList(ui::ResourceBundle::GetSharedInstance().GetFontList( 98010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ui::ResourceBundle::SmallFont)); 99010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) label->SetHorizontalAlignment(gfx::ALIGN_LEFT); 100010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) label->SetObscured(true); 101010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return label; 102010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 103010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 104010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} // namespace 105010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 106c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// Pending View 107c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen MurdochManagePasswordItemView::PendingView::PendingView( 108c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ManagePasswordItemView* parent) { 109c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch views::GridLayout* layout = new views::GridLayout(this); 110c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch SetLayoutManager(layout); 111c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 112010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) BuildColumnSet(layout, TWO_COLUMN_SET); 113c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch layout->StartRowWithPadding( 114c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 0, TWO_COLUMN_SET, 0, views::kRelatedControlVerticalSpacing); 115010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) layout->AddView(GenerateUsernameLabel(parent->password_form_)); 116010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) layout->AddView(GeneratePasswordLabel(parent->password_form_)); 117c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing); 118c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 119c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 120010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)ManagePasswordItemView::PendingView::~PendingView() { 121010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 122c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 123c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// Manage View 124c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen MurdochManagePasswordItemView::ManageView::ManageView(ManagePasswordItemView* parent) 125c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch : parent_(parent) { 126c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch views::GridLayout* layout = new views::GridLayout(this); 127c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch SetLayoutManager(layout); 128c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 129c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance(); 130c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch delete_button_ = new views::ImageButton(this); 131c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch delete_button_->SetImage(views::ImageButton::STATE_NORMAL, 132c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch rb->GetImageNamed(IDR_CLOSE_2).ToImageSkia()); 133c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch delete_button_->SetImage(views::ImageButton::STATE_HOVERED, 134c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch rb->GetImageNamed(IDR_CLOSE_2_H).ToImageSkia()); 135c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch delete_button_->SetImage(views::ImageButton::STATE_PRESSED, 136c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch rb->GetImageNamed(IDR_CLOSE_2_P).ToImageSkia()); 137c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 138010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) BuildColumnSet(layout, THREE_COLUMN_SET); 139c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch layout->StartRowWithPadding( 140c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 0, THREE_COLUMN_SET, 0, views::kRelatedControlVerticalSpacing); 141010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) layout->AddView(GenerateUsernameLabel(parent->password_form_)); 142010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) layout->AddView(GeneratePasswordLabel(parent->password_form_)); 143c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch layout->AddView(delete_button_); 144c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing); 145c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 146c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 147c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid ManagePasswordItemView::ManageView::ButtonPressed(views::Button* sender, 148c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const ui::Event& event) { 149c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch DCHECK_EQ(delete_button_, sender); 150c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch parent_->NotifyClickedDelete(); 151c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 152c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 153010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)ManagePasswordItemView::ManageView::~ManageView() { 154010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 155c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 156c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// Undo View 157c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen MurdochManagePasswordItemView::UndoView::UndoView(ManagePasswordItemView* parent) 158c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch : parent_(parent) { 159c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch views::GridLayout* layout = new views::GridLayout(this); 160c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch SetLayoutManager(layout); 161c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 162c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch views::Label* text = 163c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch new views::Label(l10n_util::GetStringUTF16(IDS_MANAGE_PASSWORDS_DELETED)); 164c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch text->SetHorizontalAlignment(gfx::ALIGN_LEFT); 165010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) text->SetFontList(ui::ResourceBundle::GetSharedInstance().GetFontList( 166010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ui::ResourceBundle::SmallFont)); 167c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 168c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch undo_link_ = 169c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch new views::Link(l10n_util::GetStringUTF16(IDS_MANAGE_PASSWORDS_UNDO)); 170c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch undo_link_->SetHorizontalAlignment(gfx::ALIGN_RIGHT); 171c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch undo_link_->set_listener(this); 172c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch undo_link_->SetUnderline(false); 173010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) undo_link_->SetFontList(ui::ResourceBundle::GetSharedInstance().GetFontList( 174010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ui::ResourceBundle::SmallFont)); 175c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 176010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) BuildColumnSet(layout, TWO_COLUMN_SET); 177c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch layout->StartRowWithPadding( 178c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 0, TWO_COLUMN_SET, 0, views::kRelatedControlVerticalSpacing); 179c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch layout->AddView(text); 180c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch layout->AddView(undo_link_); 181c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing); 182c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 183c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 184c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid ManagePasswordItemView::UndoView::LinkClicked(views::Link* sender, 185c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch int event_flags) { 186c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch DCHECK_EQ(undo_link_, sender); 187c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch parent_->NotifyClickedUndo(); 188c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 189c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 190010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)ManagePasswordItemView::UndoView::~UndoView() { 191010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 192c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 193c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// ManagePasswordItemView 194f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)ManagePasswordItemView::ManagePasswordItemView( 195f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ManagePasswordsBubbleModel* manage_passwords_bubble_model, 196f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) autofill::PasswordForm password_form, 197c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch Position position) 198010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) : model_(manage_passwords_bubble_model), 199f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) password_form_(password_form), 200010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) delete_password_(false) { 201c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch views::FillLayout* layout = new views::FillLayout(); 202f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SetLayoutManager(layout); 203f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 204c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // When a password is displayed as the first item in a list, it has borders 205c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // on both the top and bottom. When it's in the middle of a list, or at the 206c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // end, it has a border only on the bottom. 207c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch SetBorder(views::Border::CreateSolidSidedBorder( 208c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch position == FIRST_ITEM ? 1 : 0, 209c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 0, 210c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 1, 211c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 0, 212c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch GetNativeTheme()->GetSystemColor( 213c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ui::NativeTheme::kColorId_EnabledMenuButtonBorderColor))); 214c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 215010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (password_manager::ui::IsPendingState(model_->state())) { 216c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch AddChildView(new PendingView(this)); 217010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } else { 218c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch AddChildView(new ManageView(this)); 219e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch } 220010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) GetLayoutManager()->Layout(this); 221f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 222f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 223010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)ManagePasswordItemView::~ManagePasswordItemView() { 224f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 225f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 226f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void ManagePasswordItemView::Refresh() { 227010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) DCHECK(!password_manager::ui::IsPendingState(model_->state())); 228c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 229c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch RemoveAllChildViews(true); 230c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (delete_password_) 231c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch AddChildView(new UndoView(this)); 232c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch else 233c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch AddChildView(new ManageView(this)); 234c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch GetLayoutManager()->Layout(this); 235e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 236e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch // After the view is consistent, notify the model that the password needs to 237e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch // be updated (either removed or put back into the store, as appropriate. 238010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) model_->OnPasswordAction(password_form_, 239010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) delete_password_ 240010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ? ManagePasswordsBubbleModel::REMOVE_PASSWORD 241010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) : ManagePasswordsBubbleModel::ADD_PASSWORD); 242f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 243f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 244c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid ManagePasswordItemView::NotifyClickedDelete() { 245a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) delete_password_ = true; 246a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) Refresh(); 247a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 248a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 249c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid ManagePasswordItemView::NotifyClickedUndo() { 250a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) delete_password_ = false; 251f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Refresh(); 252f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 253