summaryrefslogtreecommitdiffstats
path: root/chrome/browser/ui/views/options/passwords_page_view.h
diff options
context:
space:
mode:
authorben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-11-09 07:35:32 +0000
committerben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-11-09 07:35:32 +0000
commit213dac2f0bff9162502fe325b6ebb85a255efcb2 (patch)
tree3640cb1f19976e38677b8632537d2d41f8444d0f /chrome/browser/ui/views/options/passwords_page_view.h
parent6de53d401aa8dc6c7e0a9874c71a95ce88ade50d (diff)
downloadchromium_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.h200
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_