diff options
author | ben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-11-09 07:35:32 +0000 |
---|---|---|
committer | ben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-11-09 07:35:32 +0000 |
commit | 213dac2f0bff9162502fe325b6ebb85a255efcb2 (patch) | |
tree | 3640cb1f19976e38677b8632537d2d41f8444d0f /chrome/browser/ui/views/options/passwords_page_view.h | |
parent | 6de53d401aa8dc6c7e0a9874c71a95ce88ade50d (diff) | |
download | chromium_src-213dac2f0bff9162502fe325b6ebb85a255efcb2.zip chromium_src-213dac2f0bff9162502fe325b6ebb85a255efcb2.tar.gz chromium_src-213dac2f0bff9162502fe325b6ebb85a255efcb2.tar.bz2 |
Move browser/views to browser/ui/views
TBR=brettw
BUG=none
TEST=none
Review URL: http://codereview.chromium.org/4694005
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@65508 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/ui/views/options/passwords_page_view.h')
-rw-r--r-- | chrome/browser/ui/views/options/passwords_page_view.h | 200 |
1 files changed, 200 insertions, 0 deletions
diff --git a/chrome/browser/ui/views/options/passwords_page_view.h b/chrome/browser/ui/views/options/passwords_page_view.h new file mode 100644 index 0000000..0204db5 --- /dev/null +++ b/chrome/browser/ui/views/options/passwords_page_view.h @@ -0,0 +1,200 @@ +// Copyright (c) 2009 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. + +#ifndef CHROME_BROWSER_UI_VIEWS_OPTIONS_PASSWORDS_PAGE_VIEW_H_ +#define CHROME_BROWSER_UI_VIEWS_OPTIONS_PASSWORDS_PAGE_VIEW_H_ +#pragma once + +#include <vector> + +#include "app/table_model.h" +#include "app/text_elider.h" +#include "base/scoped_ptr.h" +#include "base/stl_util-inl.h" +#include "chrome/browser/password_manager/password_store.h" +#include "chrome/browser/profile.h" +#include "chrome/browser/prefs/pref_member.h" +#include "chrome/browser/views/confirm_message_box_dialog.h" +#include "chrome/browser/views/options/options_page_view.h" +#include "views/controls/button/native_button.h" +#include "views/controls/label.h" +#include "views/controls/table/table_view.h" +#include "views/controls/table/table_view_observer.h" +#include "views/window/dialog_delegate.h" +#include "views/window/window.h" +#include "webkit/glue/password_form.h" + +/////////////////////////////////////////////////////////////////////////////// +// PasswordTableModelObserver +// An observer interface to notify change of row count in a table model. This +// allow the container view of TableView(i.e. PasswordsPageView and +// ExceptionsPageView), to be notified of row count changes directly +// from the TableModel. We have two different observers in +// PasswordsTableModel, namely TableModelObserver and +// PasswordsTableModelObserver, rather than adding this event to +// TableModelObserver because only container view of +// PasswordsTableModel cares about this event. +class PasswordsTableModelObserver { + public: + virtual void OnRowCountChanged(size_t rows) = 0; +}; + +/////////////////////////////////////////////////////////////////////////////// +// MultiLabelButtons +// A button that can have 2 different labels set on it and for which the +// preferred size is the size of the widest string. +class MultiLabelButtons : public views::NativeButton { + public: + MultiLabelButtons(views::ButtonListener* listener, + const std::wstring& label, + const std::wstring& alt_label); + + virtual gfx::Size GetPreferredSize(); + + private: + std::wstring label_; + std::wstring alt_label_; + gfx::Size pref_size_; + + DISALLOW_COPY_AND_ASSIGN(MultiLabelButtons); +}; + +/////////////////////////////////////////////////////////////////////////////// +// PasswordsTableModel +class PasswordsTableModel : public TableModel, + public PasswordStoreConsumer { + public: + explicit PasswordsTableModel(Profile* profile); + virtual ~PasswordsTableModel(); + + // TableModel methods. + virtual int RowCount(); + virtual std::wstring GetText(int row, int column); + virtual int CompareValues(int row1, int row2, int column_id); + virtual void SetObserver(TableModelObserver* observer); + + // Delete the PasswordForm at specified row from the database (and remove + // from view). + void ForgetAndRemoveSignon(int row); + + // Delete all saved signons for the active profile (via web data service), + // and clear the view. + void ForgetAndRemoveAllSignons(); + + // PasswordStoreConsumer implementation. + virtual void OnPasswordStoreRequestDone( + int handle, const std::vector<webkit_glue::PasswordForm*>& result); + + // Request saved logins data. + void GetAllSavedLoginsForProfile(); + + // Return the PasswordForm at the specified index. + webkit_glue::PasswordForm* GetPasswordFormAt(int row); + + // Set the observer who concerns about how many rows are in the table. + void set_row_count_observer(PasswordsTableModelObserver* observer) { + row_count_observer_ = observer; + } + + protected: + // Wraps the PasswordForm from the database and caches the display URL for + // quick sorting. + struct PasswordRow { + PasswordRow(const gfx::SortedDisplayURL& url, + webkit_glue::PasswordForm* password_form) + : display_url(url), form(password_form) { + } + + // Contains the URL that is displayed along with the + gfx::SortedDisplayURL display_url; + + // The underlying PasswordForm. We own this. + scoped_ptr<webkit_glue::PasswordForm> form; + }; + + // The password store associated with the currently active profile. + PasswordStore* password_store() { + return profile_->GetPasswordStore(Profile::EXPLICIT_ACCESS); + } + + // The TableView observing this model. + TableModelObserver* observer_; + + // Dispatching row count events specific to this password manager table model + // to this observer. + PasswordsTableModelObserver* row_count_observer_; + + // Handle to any pending PasswordStore login lookup query. + int pending_login_query_; + + // The set of passwords we're showing. + typedef std::vector<PasswordRow*> PasswordRows; + PasswordRows saved_signons_; + STLElementDeleter<PasswordRows> saved_signons_cleanup_; + + Profile* profile_; + + private: + // Cancel any pending login query involving a callback. + void CancelLoginsQuery(); + + DISALLOW_COPY_AND_ASSIGN(PasswordsTableModel); +}; + +/////////////////////////////////////////////////////////////////////////////// +// PasswordsPageView +class PasswordsPageView : public OptionsPageView, + public views::TableViewObserver, + public views::ButtonListener, + public PasswordsTableModelObserver, + public ConfirmMessageBoxObserver { + public: + explicit PasswordsPageView(Profile* profile); + virtual ~PasswordsPageView(); + + // views::TableViewObserverImplementation. + virtual void OnSelectionChanged(); + + // views::ButtonListener implementation. + virtual void ButtonPressed(views::Button* sender, const views::Event& event); + + // PasswordsTableModelObserver implementation. + virtual void OnRowCountChanged(size_t rows); + + // ConfirmMessageBoxObserver implementation. + virtual void OnConfirmMessageAccept(); + + protected: + virtual void InitControlLayout(); + + private: + // Helper to configure our buttons and labels. + void SetupButtonsAndLabels(); + + // Helper to configure our table view. + void SetupTable(); + + // Helper that hides the password. + void HidePassword(); + + // Handles changes to the observed preferences and updates the UI. + void NotifyPrefChanged(const std::string* pref_name); + + PasswordsTableModel table_model_; + views::TableView* table_view_; + + // The buttons and labels. + MultiLabelButtons show_button_; + views::NativeButton remove_button_; + views::NativeButton remove_all_button_; + views::Label password_label_; + webkit_glue::PasswordForm* current_selected_password_; + + // Tracks the preference that controls whether showing passwords is allowed. + BooleanPrefMember allow_show_passwords_; + + DISALLOW_COPY_AND_ASSIGN(PasswordsPageView); +}; + +#endif // CHROME_BROWSER_UI_VIEWS_OPTIONS_PASSWORDS_PAGE_VIEW_H_ |