Index: chrome/browser/ui/autofill/account_chooser_model.h |
diff --git a/chrome/browser/ui/autofill/account_chooser_model.h b/chrome/browser/ui/autofill/account_chooser_model.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..d40888b2cdaf8045b1954f5dc736b934f168bc00 |
--- /dev/null |
+++ b/chrome/browser/ui/autofill/account_chooser_model.h |
@@ -0,0 +1,127 @@ |
+// Copyright 2013 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_AUTOFILL_ACCOUNT_CHOOSER_MODEL_H_ |
+#define CHROME_BROWSER_UI_AUTOFILL_ACCOUNT_CHOOSER_MODEL_H_ |
+ |
+#include <vector> |
+ |
+#include "base/basictypes.h" |
+#include "base/compiler_specific.h" |
+#include "base/string16.h" |
+#include "ui/base/models/simple_menu_model.h" |
+ |
+class PrefService; |
+ |
+namespace autofill { |
+ |
+// A delegate interface to allow the AccountChooserModel to inform its owner |
+// of changes. |
+class AccountChooserModelDelegate { |
+ public: |
+ virtual ~AccountChooserModelDelegate(); |
+ |
+ // Called when the active account has changed. |
+ virtual void AccountChoiceChanged() = 0; |
+ |
+ // Called when the account chooser UI needs to be updated. |
+ virtual void UpdateAccountChooserView() = 0; |
+}; |
+ |
+// A menu model for the account chooser. This allows users to switch between |
+// Online Wallet accounts and local Autofill data. |
+// Terminology: |
+// - "Active Wallet account": the account used for communications with the |
+// Online Wallet service. There may be multiple signed-in accounts, but at any |
Evan Stade
2013/04/12 17:06:36
be consistent about the number of spaces after a p
aruslan
2013/04/12 20:43:30
Done.
|
+// point of time at most one of is active. |
+class AccountChooserModel : public ui::SimpleMenuModel, |
+ public ui::SimpleMenuModel::Delegate { |
+ public: |
+ AccountChooserModel(AccountChooserModelDelegate* delegate, |
+ PrefService* prefs); |
+ virtual ~AccountChooserModel(); |
+ |
+ // ui::SimpleMenuModel::Delegate implementation. |
+ virtual bool IsCommandIdChecked(int command_id) const OVERRIDE; |
+ virtual bool IsCommandIdEnabled(int command_id) const OVERRIDE; |
+ virtual bool GetAcceleratorForCommandId( |
+ int command_id, |
+ ui::Accelerator* accelerator) OVERRIDE; |
+ virtual void ExecuteCommand(int command_id, int event_flags) OVERRIDE; |
+ |
+ // Sets the selection to the currently active Online Wallet account. |
+ // Should be called if the user attempts to sign into the Online Wallet |
+ // (e.g. when the user clicks the "Sign-in" link). |
+ void SelectActiveWalletAccount(); |
+ |
+ // Sets the selection to the local autofill data. |
Evan Stade
2013/04/12 17:06:36
capitalize Autofill.
aruslan
2013/04/12 20:43:30
Done.
|
+ void SelectAutofillData(); |
Evan Stade
2013/04/12 17:06:36
how about SelectUseAutofill?
aruslan
2013/04/12 20:43:30
Done.
|
+ |
+ // Returns true if there are any accounts for the user to choose from. |
+ bool HasAccountsToChoose() const; |
+ |
+ // Sets the name of the account used to communicate with the Online Wallet. |
+ void SetActiveWalletAccountName(const string16& account); |
+ |
+ // Clears the name of the account used to communicate with the Online Wallet. |
+ // Any Wallet error automatically clears the currently active account name. |
+ void ClearActiveWalletAccountName(); |
+ |
+ // Returns the name of the currently active account, or an empty string. |
+ const string16& active_wallet_account_name() const { |
+ return active_wallet_account_name_; |
+ } |
+ |
+ // Disables all Wallet accounts and switches to the autofill data. |
+ // Should be called when the Wallet server returns an error. |
+ void SetHadWalletError(); |
+ |
+ // Switches the dialog to the local autofill data. |
+ // Should be called when the Online Wallet sign-in attempt has failed. |
+ void SetHadWalletSigninError(); |
+ |
+ bool had_wallet_error() const { return had_wallet_error_; } |
+ |
+ // Returns true if the selected account is an Online Wallet account. |
+ bool WalletIsSelected() const; |
+ |
+ // Returns true if the current selection matches the currently active |
+ // Wallet account. |
+ bool IsActiveWalletAccountSelected() const; |
+ |
+ // Returns the command id of the current selection. |
+ int checked_item() const { return checked_item_; } |
+ |
+ protected: |
+ // Command IDs of the items in this menu; protected for the tests. |
+ // kActiveWalletItemId is the currently active account. |
+ // kAutofillItemId is "Pay without the Wallet" (local autofill data). |
+ // In the future, kFirstAdditionalItemId will be added as the first id |
+ // for additional accounts. |
+ static const int kActiveWalletItemId; |
+ static const int kAutofillItemId; |
+ |
+ private: |
+ // Reconstructs the set of menu items. |
+ void ReconstructMenuItems(); |
+ |
+ AccountChooserModelDelegate* delegate_; |
+ |
+ // The command id of the currently selected item. |
+ int checked_item_; |
+ |
+ // Whether there has been a Wallet error while the owning dialog has been |
+ // open. |
+ bool had_wallet_error_; |
+ |
+ // The name (email) of the account currently used in communications with the |
+ // Online Wallet service. |
+ string16 active_wallet_account_name_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(AccountChooserModel); |
+}; |
+ |
+} // namespace autofill |
+ |
+#endif // CHROME_BROWSER_UI_AUTOFILL_ACCOUNT_CHOOSER_MODEL_H_ |