Index: chrome/browser/ui/views/options/passwords_page_view.cc |
diff --git a/chrome/browser/ui/views/options/passwords_page_view.cc b/chrome/browser/ui/views/options/passwords_page_view.cc |
deleted file mode 100644 |
index 9b714e05318972c68250aadf32f77814bd555a1e..0000000000000000000000000000000000000000 |
--- a/chrome/browser/ui/views/options/passwords_page_view.cc |
+++ /dev/null |
@@ -1,371 +0,0 @@ |
-// Copyright (c) 2011 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/views/options/passwords_page_view.h" |
- |
-#include "base/i18n/rtl.h" |
-#include "base/string_util.h" |
-#include "base/utf_string_conversions.h" |
-#include "chrome/browser/password_manager/password_store.h" |
-#include "chrome/browser/prefs/pref_service.h" |
-#include "chrome/browser/profiles/profile.h" |
-#include "chrome/common/pref_names.h" |
-#include "grit/generated_resources.h" |
-#include "ui/base/l10n/l10n_util.h" |
-#include "views/background.h" |
-#include "views/controls/button/native_button.h" |
-#include "views/layout/grid_layout.h" |
-#include "views/layout/layout_constants.h" |
- |
-using views::ColumnSet; |
-using views::GridLayout; |
-using webkit_glue::PasswordForm; |
- |
-/////////////////////////////////////////////////////////////////////////////// |
-// MultiLabelButtons |
-MultiLabelButtons::MultiLabelButtons(views::ButtonListener* listener, |
- const std::wstring& label, |
- const std::wstring& alt_label) |
- : NativeButton(listener, label), |
- label_(label), |
- alt_label_(alt_label) { |
-} |
- |
-gfx::Size MultiLabelButtons::GetPreferredSize() { |
- if (!IsVisible()) |
- return gfx::Size(); |
- |
- if (pref_size_.IsEmpty()) { |
- // Let's compute our preferred size. |
- std::wstring current_label = label(); |
- SetLabel(label_); |
- pref_size_ = NativeButton::GetPreferredSize(); |
- SetLabel(alt_label_); |
- gfx::Size alt_pref_size = NativeButton::GetPreferredSize(); |
- // Revert to the original label. |
- SetLabel(current_label); |
- pref_size_.SetSize(std::max(pref_size_.width(), alt_pref_size.width()), |
- std::max(pref_size_.height(), alt_pref_size.height())); |
- } |
- return gfx::Size(pref_size_.width(), pref_size_.height()); |
-} |
- |
-/////////////////////////////////////////////////////////////////////////////// |
-// PasswordsTableModel, public |
-PasswordsTableModel::PasswordsTableModel(Profile* profile) |
- : observer_(NULL), |
- row_count_observer_(NULL), |
- pending_login_query_(NULL), |
- saved_signons_cleanup_(&saved_signons_), |
- profile_(profile) { |
- DCHECK(profile && profile->GetPasswordStore(Profile::EXPLICIT_ACCESS)); |
-} |
- |
-PasswordsTableModel::~PasswordsTableModel() { |
- CancelLoginsQuery(); |
-} |
- |
-int PasswordsTableModel::RowCount() { |
- return static_cast<int>(saved_signons_.size()); |
-} |
- |
-string16 PasswordsTableModel::GetText(int row, |
- int col_id) { |
- switch (col_id) { |
- case IDS_PASSWORDS_PAGE_VIEW_SITE_COLUMN: { // Site. |
- // Force URL to have LTR directionality. |
- std::wstring url(saved_signons_[row]->display_url.display_url()); |
- return base::i18n::GetDisplayStringInLTRDirectionality( |
- WideToUTF16Hack(url)); |
- } |
- case IDS_PASSWORDS_PAGE_VIEW_USERNAME_COLUMN: { // Username. |
- std::wstring username = GetPasswordFormAt(row)->username_value; |
- base::i18n::AdjustStringForLocaleDirection(&username); |
- return WideToUTF16Hack(username); |
- } |
- default: |
- NOTREACHED() << "Invalid column."; |
- return string16(); |
- } |
-} |
- |
-int PasswordsTableModel::CompareValues(int row1, int row2, |
- int column_id) { |
- if (column_id == IDS_PASSWORDS_PAGE_VIEW_SITE_COLUMN) { |
- return saved_signons_[row1]->display_url.Compare( |
- saved_signons_[row2]->display_url, GetCollator()); |
- } |
- return TableModel::CompareValues(row1, row2, column_id); |
-} |
- |
-void PasswordsTableModel::SetObserver(ui::TableModelObserver* observer) { |
- observer_ = observer; |
-} |
- |
-void PasswordsTableModel::GetAllSavedLoginsForProfile() { |
- DCHECK(!pending_login_query_); |
- pending_login_query_ = password_store()->GetAutofillableLogins(this); |
-} |
- |
-void PasswordsTableModel::OnPasswordStoreRequestDone( |
- int handle, const std::vector<PasswordForm*>& result) { |
- DCHECK_EQ(pending_login_query_, handle); |
- pending_login_query_ = NULL; |
- |
- STLDeleteElements<PasswordRows>(&saved_signons_); |
- saved_signons_.resize(result.size(), NULL); |
- std::string languages = profile_->GetPrefs()->GetString( |
- prefs::kAcceptLanguages); |
- for (size_t i = 0; i < result.size(); ++i) { |
- saved_signons_[i] = new PasswordRow( |
- ui::SortedDisplayURL(result[i]->origin, languages), result[i]); |
- } |
- if (observer_) |
- observer_->OnModelChanged(); |
- if (row_count_observer_) |
- row_count_observer_->OnRowCountChanged(RowCount()); |
-} |
- |
-PasswordForm* PasswordsTableModel::GetPasswordFormAt(int row) { |
- DCHECK(row >= 0 && row < RowCount()); |
- return saved_signons_[row]->form.get(); |
-} |
- |
-void PasswordsTableModel::ForgetAndRemoveSignon(int row) { |
- DCHECK(row >= 0 && row < RowCount()); |
- PasswordRows::iterator target_iter = saved_signons_.begin() + row; |
- // Remove from DB, memory, and vector. |
- PasswordRow* password_row = *target_iter; |
- password_store()->RemoveLogin(*(password_row->form.get())); |
- delete password_row; |
- saved_signons_.erase(target_iter); |
- if (observer_) |
- observer_->OnItemsRemoved(row, 1); |
- if (row_count_observer_) |
- row_count_observer_->OnRowCountChanged(RowCount()); |
-} |
- |
-void PasswordsTableModel::ForgetAndRemoveAllSignons() { |
- PasswordRows::iterator iter = saved_signons_.begin(); |
- while (iter != saved_signons_.end()) { |
- // Remove from DB, memory, and vector. |
- PasswordRow* row = *iter; |
- password_store()->RemoveLogin(*(row->form.get())); |
- delete row; |
- iter = saved_signons_.erase(iter); |
- } |
- if (observer_) |
- observer_->OnModelChanged(); |
- if (row_count_observer_) |
- row_count_observer_->OnRowCountChanged(RowCount()); |
-} |
- |
-/////////////////////////////////////////////////////////////////////////////// |
-// PasswordsTableModel, private |
-void PasswordsTableModel::CancelLoginsQuery() { |
- if (pending_login_query_) { |
- password_store()->CancelLoginsQuery(pending_login_query_); |
- pending_login_query_ = NULL; |
- } |
-} |
- |
-/////////////////////////////////////////////////////////////////////////////// |
-// PasswordsPageView, public |
-PasswordsPageView::PasswordsPageView(Profile* profile) |
- : OptionsPageView(profile), |
- ALLOW_THIS_IN_INITIALIZER_LIST(show_button_( |
- this, |
- UTF16ToWide(l10n_util::GetStringUTF16( |
- IDS_PASSWORDS_PAGE_VIEW_SHOW_BUTTON)), |
- UTF16ToWide(l10n_util::GetStringUTF16( |
- IDS_PASSWORDS_PAGE_VIEW_HIDE_BUTTON)))), |
- ALLOW_THIS_IN_INITIALIZER_LIST(remove_button_( |
- this, |
- UTF16ToWide(l10n_util::GetStringUTF16( |
- IDS_PASSWORDS_PAGE_VIEW_REMOVE_BUTTON)))), |
- ALLOW_THIS_IN_INITIALIZER_LIST(remove_all_button_( |
- this, |
- UTF16ToWide(l10n_util::GetStringUTF16( |
- IDS_PASSWORDS_PAGE_VIEW_REMOVE_ALL_BUTTON)))), |
- table_model_(profile), |
- table_view_(NULL), |
- current_selected_password_(NULL) { |
- allow_show_passwords_.Init(prefs::kPasswordManagerAllowShowPasswords, |
- profile->GetPrefs(), |
- this); |
-} |
- |
-PasswordsPageView::~PasswordsPageView() { |
- // The model is going away, prevent the table from accessing it. |
- if (table_view_) |
- table_view_->SetModel(NULL); |
-} |
- |
-void PasswordsPageView::OnSelectionChanged() { |
- bool has_selection = table_view_->SelectedRowCount() > 0; |
- remove_button_.SetEnabled(has_selection); |
- |
- PasswordForm* selected = NULL; |
- if (has_selection) { |
- views::TableSelectionIterator iter = table_view_->SelectionBegin(); |
- selected = table_model_.GetPasswordFormAt(*iter); |
- DCHECK(++iter == table_view_->SelectionEnd()); |
- } |
- |
- if (selected != current_selected_password_) { |
- // Reset the password related views. |
- show_button_.SetLabel(UTF16ToWide( |
- l10n_util::GetStringUTF16(IDS_PASSWORDS_PAGE_VIEW_SHOW_BUTTON))); |
- show_button_.SetEnabled(has_selection); |
- password_label_.SetText(std::wstring()); |
- |
- current_selected_password_ = selected; |
- } |
-} |
- |
-void PasswordsPageView::ButtonPressed( |
- views::Button* sender, const views::Event& event) { |
- // Close will result in our destruction. |
- if (sender == &remove_all_button_) { |
- ConfirmMessageBoxDialog::Run( |
- GetWindow()->GetNativeWindow(), |
- this, |
- UTF16ToWide(l10n_util::GetStringUTF16( |
- IDS_PASSWORDS_PAGE_VIEW_TEXT_DELETE_ALL_PASSWORDS)), |
- UTF16ToWide(l10n_util::GetStringUTF16( |
- IDS_PASSWORDS_PAGE_VIEW_CAPTION_DELETE_ALL_PASSWORDS))); |
- return; |
- } |
- |
- // The following require a selection (and only one, since table is single- |
- // select only). |
- views::TableSelectionIterator iter = table_view_->SelectionBegin(); |
- int row = *iter; |
- PasswordForm* selected = table_model_.GetPasswordFormAt(row); |
- DCHECK(++iter == table_view_->SelectionEnd()); |
- |
- if (sender == &remove_button_) { |
- table_model_.ForgetAndRemoveSignon(row); |
- } else if (sender == &show_button_) { |
- if (password_label_.GetText().length() == 0 && |
- allow_show_passwords_.GetValue()) { |
- password_label_.SetText(selected->password_value); |
- show_button_.SetLabel(UTF16ToWide( |
- l10n_util::GetStringUTF16(IDS_PASSWORDS_PAGE_VIEW_HIDE_BUTTON))); |
- } else { |
- HidePassword(); |
- } |
- } else { |
- NOTREACHED() << "Invalid button."; |
- } |
-} |
- |
-void PasswordsPageView::OnRowCountChanged(size_t rows) { |
- remove_all_button_.SetEnabled(rows > 0); |
-} |
- |
-void PasswordsPageView::OnConfirmMessageAccept() { |
- table_model_.ForgetAndRemoveAllSignons(); |
-} |
- |
-/////////////////////////////////////////////////////////////////////////////// |
-// PasswordsPageView, protected |
-void PasswordsPageView::InitControlLayout() { |
- SetupButtonsAndLabels(); |
- SetupTable(); |
- |
- // Do the layout thing. |
- const int top_column_set_id = 0; |
- GridLayout* layout = GridLayout::CreatePanel(this); |
- SetLayoutManager(layout); |
- |
- // Design the grid. |
- ColumnSet* column_set = layout->AddColumnSet(top_column_set_id); |
- column_set->AddColumn(GridLayout::FILL, GridLayout::FILL, 1, |
- GridLayout::USE_PREF, 0, 0); |
- column_set->AddPaddingColumn(0, views::kRelatedControlHorizontalSpacing); |
- column_set->AddColumn(GridLayout::FILL, GridLayout::CENTER, 0, |
- GridLayout::USE_PREF, 0, 0); |
- |
- // Fill the grid. |
- layout->StartRow(0, top_column_set_id); |
- layout->AddView(table_view_, 1, 8, GridLayout::FILL, |
- GridLayout::FILL); |
- layout->AddView(&remove_button_); |
- layout->StartRowWithPadding(0, top_column_set_id, 0, |
- views::kRelatedControlVerticalSpacing); |
- layout->SkipColumns(1); |
- layout->AddView(&remove_all_button_); |
- layout->StartRowWithPadding(0, top_column_set_id, 0, |
- views::kRelatedControlVerticalSpacing); |
- layout->SkipColumns(1); |
- layout->AddView(&show_button_); |
- layout->StartRowWithPadding(0, top_column_set_id, 0, |
- views::kRelatedControlVerticalSpacing); |
- layout->SkipColumns(1); |
- layout->AddView(&password_label_); |
- layout->AddPaddingRow(1, 0); |
- |
- // Ask the database for saved password data. |
- table_model_.GetAllSavedLoginsForProfile(); |
-} |
- |
-/////////////////////////////////////////////////////////////////////////////// |
-// PasswordsPageView, private |
-void PasswordsPageView::SetupButtonsAndLabels() { |
- // Disable all buttons in the first place. |
- show_button_.set_parent_owned(false); |
- show_button_.SetEnabled(false); |
- |
- remove_button_.set_parent_owned(false); |
- remove_button_.SetEnabled(false); |
- |
- remove_all_button_.set_parent_owned(false); |
- remove_all_button_.SetEnabled(false); |
- |
- password_label_.set_parent_owned(false); |
-} |
- |
-void PasswordsPageView::SetupTable() { |
- // Tell the table model we are concern about how many rows it has. |
- table_model_.set_row_count_observer(this); |
- |
- // Creates the different columns for the table. |
- // The float resize values are the result of much tinkering. |
- std::vector<ui::TableColumn> columns; |
- columns.push_back(ui::TableColumn(IDS_PASSWORDS_PAGE_VIEW_SITE_COLUMN, |
- ui::TableColumn::LEFT, -1, 0.55f)); |
- columns.back().sortable = true; |
- columns.push_back(ui::TableColumn( |
- IDS_PASSWORDS_PAGE_VIEW_USERNAME_COLUMN, ui::TableColumn::LEFT, |
- -1, 0.37f)); |
- columns.back().sortable = true; |
- table_view_ = new views::TableView(&table_model_, columns, views::TEXT_ONLY, |
- true, true, true); |
- // Make the table initially sorted by host. |
- views::TableView::SortDescriptors sort; |
- sort.push_back(views::TableView::SortDescriptor( |
- IDS_PASSWORDS_PAGE_VIEW_SITE_COLUMN, true)); |
- table_view_->SetSortDescriptors(sort); |
- table_view_->SetObserver(this); |
-} |
- |
-void PasswordsPageView::HidePassword() { |
- password_label_.SetText(L""); |
- show_button_.SetLabel(UTF16ToWide( |
- l10n_util::GetStringUTF16(IDS_PASSWORDS_PAGE_VIEW_SHOW_BUTTON))); |
-} |
- |
-void PasswordsPageView::NotifyPrefChanged(const std::string* pref_name) { |
- if (!pref_name || *pref_name == prefs::kPasswordManagerAllowShowPasswords) { |
- bool show = allow_show_passwords_.GetValue(); |
- if (!show) |
- HidePassword(); |
- show_button_.SetVisible(show); |
- password_label_.SetVisible(show); |
- // Update the layout (it may depend on the button size). |
- show_button_.InvalidateLayout(); |
- Layout(); |
- } |
-} |