diff options
author | initial.commit <initial.commit@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-07-26 23:55:29 +0000 |
---|---|---|
committer | initial.commit <initial.commit@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-07-26 23:55:29 +0000 |
commit | 09911bf300f1a419907a9412154760efd0b7abc3 (patch) | |
tree | f131325fb4e2ad12c6d3504ab75b16dd92facfed /chrome/browser/views/password_manager_view.h | |
parent | 586acc5fe142f498261f52c66862fa417c3d52d2 (diff) | |
download | chromium_src-09911bf300f1a419907a9412154760efd0b7abc3.zip chromium_src-09911bf300f1a419907a9412154760efd0b7abc3.tar.gz chromium_src-09911bf300f1a419907a9412154760efd0b7abc3.tar.bz2 |
Add chrome to the repository.
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@15 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/views/password_manager_view.h')
-rw-r--r-- | chrome/browser/views/password_manager_view.h | 170 |
1 files changed, 170 insertions, 0 deletions
diff --git a/chrome/browser/views/password_manager_view.h b/chrome/browser/views/password_manager_view.h new file mode 100644 index 0000000..19c92ad --- /dev/null +++ b/chrome/browser/views/password_manager_view.h @@ -0,0 +1,170 @@ +// Copyright 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#ifndef CHROME_BROWSER_PASSWORD_MANAGER_VIEW_H__ +#define CHROME_BROWSER_PASSWORD_MANAGER_VIEW_H__ + +#include <vector> + +#include "chrome/browser/webdata/web_data_service.h" +#include "chrome/views/dialog_delegate.h" +#include "chrome/views/label.h" +#include "chrome/views/native_button.h" +#include "chrome/views/table_view.h" +#include "chrome/views/window.h" + +class Profile; +struct PasswordForm; + +class PasswordManagerTableModel : public ChromeViews::TableModel, + public WebDataServiceConsumer { + public: + explicit PasswordManagerTableModel(WebDataService* profile_web_data_service); + virtual ~PasswordManagerTableModel(); + + // TableModel methods. + virtual int RowCount(); + virtual std::wstring GetText(int row, int column); + virtual void SetObserver(ChromeViews::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(); + + // WebDataServiceConsumer implementation. + virtual void OnWebDataServiceRequestDone(WebDataService::Handle h, + const WDTypedResult* result); + // Request saved logins data. + void GetAllSavedLoginsForProfile(); + + // Return the PasswordForm at the specified index. + PasswordForm* GetPasswordFormAt(int row); + + private: + // Cancel any pending login query involving a callback. + void CancelLoginsQuery(); + + // The TableView observing this model. + ChromeViews::TableModelObserver* observer_; + + // Handle to any pending WebDataService::GetLogins query. + WebDataService::Handle pending_login_query_; + + // PasswordForms returned by the web data service query. + typedef std::vector<PasswordForm*> PasswordForms; + PasswordForms saved_signons_; + + // Deleter for saved_logins_. + STLElementDeleter<PasswordForms> saved_signons_deleter_; + + // The web data service associated with the currently active profile. + WebDataService* web_data_service_; + + DISALLOW_EVIL_CONSTRUCTORS(PasswordManagerTableModel); +}; + +// 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 ChromeViews::NativeButton { + public: + MultiLabelButtons(const std::wstring& label, const std::wstring& alt_label); + + virtual void GetPreferredSize(CSize *out); + + private: + std::wstring label_; + std::wstring alt_label_; + CSize pref_size_; + + DISALLOW_EVIL_CONSTRUCTORS(MultiLabelButtons); +}; + +class PasswordManagerView : public ChromeViews::View, + public ChromeViews::DialogDelegate, + public ChromeViews::TableViewObserver, + public ChromeViews::NativeButton::Listener { + public: + explicit PasswordManagerView(Profile* profile); + virtual ~PasswordManagerView(); + + // Show the PasswordManagerContentView for the given profile. + static void Show(Profile* profile); + + // View methods. + virtual void Layout(); + virtual void GetPreferredSize(CSize *out); + virtual void ViewHierarchyChanged(bool is_add, ChromeViews::View* parent, + ChromeViews::View* child); + + // ChromeViews::TableViewObserver implementation. + virtual void OnSelectionChanged(); + + // NativeButton::Listener implementation. + virtual void ButtonPressed(ChromeViews::NativeButton* sender); + + // ChromeViews::DialogDelegate methods: + virtual int GetDialogButtons() const; + virtual bool CanResize() const; + virtual bool CanMaximize() const; + virtual bool IsAlwaysOnTop() const; + virtual bool HasAlwaysOnTopMenu() const; + virtual std::wstring GetWindowTitle() const; + virtual void WindowClosing(); + + private: + // Wire up buttons, the model, and the table view, and query the DB for + // saved login data tied to the given profile. + void Init(); + + // Helper to configure our buttons and labels. + void SetupButtonsAndLabels(); + + // Helper to configure our table view. + void SetupTable(); + + // Components in this view. + PasswordManagerTableModel table_model_; + ChromeViews::TableView* table_view_; + + // The buttons and labels. + MultiLabelButtons show_button_; + ChromeViews::NativeButton remove_button_; + ChromeViews::NativeButton remove_all_button_; + ChromeViews::Label password_label_; + + // The window containing this view. + ChromeViews::Window* dialog_; + + DISALLOW_EVIL_CONSTRUCTORS(PasswordManagerView); +}; +#endif // CHROME_BROWSER_PASSWORD_MANAGER_VIEW_H__ |